我的系统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使用我的新库。任何帮助将不胜感激。
答案 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所在的目录。试试那个。同样地,对于您遇到问题的任何其他选项。