GCC没有链接正确的库

时间:2012-03-03 20:02:02

标签: c++ gcc g++ autotools ld

我的系统4.6.2和4.7.0上安装了两个版本的GCC。我正在运行Fedora Core 16。

4.6.2安装在/usr/bin中,4.7.0安装在/home/nerozehl/local/bin中。 C ++的库和运行时也在/home/nerozehl/local/lib/home/nerozehl/local/lib64中编译和安装。

我还安装了两个版本的Boost,其中包含/usr/lib64/home/nerozehl/local/lib中的库。 (分别提升1.47.0和1.49.0)

我遇到的问题是g ++ / ld链接到默认库,而不是/home/nerozehl/local中的新库。我正在使用configure来生成Makefile,我这样称呼它:

CXX=g++47 CXXFLAGS="-g -O0 -pg" LDFLAGS="-L/home/nerozehl/local/lib" ./configure --prefix=/home/nerozehl/local

g++47位于/home/nerozehl/local/bin的{​​{1}}中。

当我编译时,一切都很好,并且使用了较新的标题,但当我检查链接的内容时:

$PATH

对于我的生活,我无法弄清楚如何强制g ++ / ld / configure使用我的新库。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:10)

ldd没有告诉你链接的可执行文件是什么 - 它告诉你可执行文件在运行时会加载哪些共享对象。如果您希望它在运行时从/ home / nerozehl加载,您需要执行以下操作之一:

  • 运行程序时将LD_LIBRARY_PATH设置为包含/ home / nerozehl / local / lib

  • 将/ home / nerozehl / local / lib添加到ld.so.conf,这样每个人都可以使用它。仅适用于使用ld.so.conf的系统(例如linux)。

  • 将该计划与-Wl,-rpath,/home/nerozehl/local/lib相关联。但是,仅适用于使用ELF的系统或支持它的其他可执行格式。它还将路径硬编码到可执行文件中,这有点脆弱 - 如果将可执行文件移动到另一台计算机或重新安排文件系统,它可能会中断。

答案 1 :(得分:1)

您确定您的配置脚本正在关注LDFLAGS吗?运行./configure --help并查看选项。通常有一个名为--with-boost =的东西,然后你给出了boost所在的目录。试试那个。同样地,对于您遇到问题的任何其他选项。