我的自定义构建的 gcc 4.6.0 安装在我的主目录中,在 ubuntu 10.04 上,大多数时候链接系统 libstdc++ 而不是自定义构建的(如 ldd 所证明的那样)。更令人费解的是,使用这个新构建的 gcc,自定义编译的 openmpi 库被正确链接,这是我编译的唯一表现正常的软件。有人对此有任何解释或解决方法吗?
谢谢
配置时是否没有将libstdc静态链接到gcc的选项?--disable-shared 如果我了解它是如何正常工作的。最坏的情况是使用该开关再次编译 gcc,看看你是否遇到了问题。
我不知道为什么在最终用户的 GCC 网站上没有更清楚地详细说明这一点。GCC FAQ 明确指出这是一个常见问题 wrt libstdc++
。环境变量很麻烦。包装链接器,没有人知道该怎么做。编辑/etc/ld.so.conf
不是一种选择。-Wl,-rpath
到处添加,加油。最简单的解决方案是specs
文件。对于典型的 64 位 x86 Linux 系统,进入自定义 gcc 安装,dirname `g++ -print-libgcc-file-name`
然后运行g++ -dumpspecs > specs
. 编辑该文件,找到该*link_command:
部分。%(link_libgcc)
添加后-rpath /home/user/bin/gcc-9/lib64
(当然使用自己的路径)。或者将相同的 rpath 添加到*link:
部分的末尾。或者,将 gcc 配置为--with-specs='%{!static:%x{-rpath=/home/user/bin/gcc9/lib64} %x{-enable-new-dtags}}'
. 享受您自己的 C++ 编译器,该编译器可以生成可以正常工作的二进制文件。
也可以看看: