ubuntu 11.04 上自定义构建的 gcc 4.6.0 链接错误的 libstdc++
我定制的 gcc 4.6.0 安装在 ubuntu 10.04 上的主目录中,大多数情况下链接系统 libstdc++ 而不是定制的 gcc(如 ldd 所证明的)。更令人费解的是,使用这个新构建的 gcc,自定义编译的 openmpi 库被正确链接,这是我编译的唯一一个表现良好的软件。有人对此有任何解释或解决方法吗?
谢谢
my custom built gcc 4.6.0, installed in my home directory, on ubuntu 10.04, links the system libstdc++ instead of the custom built one, most of the time (as evidenced by ldd). to be more puzzling, using this newly built gcc, custom compiled openmpi libraries are linked correctly, and this is the only software i have compiled that behaves ok. does anybody have any explanation for this, or a workaround?
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
配置时没有将 libstdc 静态链接到 gcc 的选项吗? --disable-shared 如果我理解它如何正确工作。最坏的情况是使用该开关再次编译 gcc,看看是否遇到问题。
Isn't there an option to statically link the libstdc into the gcc when you configure it? --disable-shared if I understand how it works correctly. Worst case make another compile of gcc with that switch and see if you run into the issue.
我不知道为什么 GCC 网站上没有为最终用户提供更清晰的详细信息。 GCC 常见问题解答明确指出这是
libstdc++
的常见问题。环境变量很麻烦。包装链接器,没有人知道如何做到这一点。编辑/etc/ld.so.conf
不是一个选项。到处添加-Wl,-rpath
,来吧。最简单的解决方案是specs
文件。对于典型的 64 位 x86 Linux 系统,进入您的自定义 gcc 安装,在dirname `g++ -print-libgcc-file-name`
中,然后运行 g++ -dumpspecs >规格
。编辑该文件,找到*link_command:
部分。在%(link_libgcc)
之后添加-rpath /home/user/bin/gcc-9/lib64
(当然使用你自己的路径)。或者将相同的 rpath 添加到*link:
部分的末尾。或者,使用--with-specs='%{!static:%x{-rpath=/home/user/bin/gcc9/lib64} %x{-enable-new-dtags}}'< 配置 gcc /代码> .享受您自己的 C++ 编译器,它生成可以正常工作的二进制文件。
另请参阅:
I don't know why this isn't detailed more clearly on the GCC website for end-users. The GCC FAQ clearly states this is a common problem wrt
libstdc++
. Environment variables are troublesome. Wrapping the linker, nobody knows how to do that. Editing/etc/ld.so.conf
isn't an option. Adding-Wl,-rpath
everywhere, come on. The easiest solution is thespecs
file. For a typical 64-bit x86 Linux system, go into your custom gcc installation, indirname `g++ -print-libgcc-file-name`
and then rung++ -dumpspecs > specs
. Edit that file, find the*link_command:
section. After%(link_libgcc)
add-rpath /home/user/bin/gcc-9/lib64
(of course use your own path). Or add the same rpath to end of*link:
section. Alternatively, configure gcc with--with-specs='%{!static:%x{-rpath=/home/user/bin/gcc9/lib64} %x{-enable-new-dtags}}'
. Enjoy your own C++ compiler that generates binaries that just work.See also: