2012-03-03 94 views
9

我有两个版本的GCC安装在我的系统4.6.2和4.7.0。我正在运行Fedora Core 16.GCC没有链接正确的库

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。 (分别为Boost 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(在我$PATH)。

当我编译,一切都很好,并且使用较新的标题,但是当我检查什么是链接的是:

ldd source/noes 
    linux-vdso.so.1 => (0x00007fffebfff000) 
    libboost_filesystem-mt.so.1.47.0 => /usr/lib64/libboost_filesystem-mt.so.1.47.0 (0x0000003c6a800000) 
    libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x0000003c6a400000) 
    libboost_program_options-mt.so.1.47.0 => /usr/lib64/libboost_program_options-mt.so.1.47.0 (0x0000003c6ac00000) 
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c6dc00000) 
    libm.so.6 => /lib64/libm.so.6 (0x0000003c68c00000) 
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c69c00000) 
    libc.so.6 => /lib64/libc.so.6 (0x0000003c68800000) 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c69000000) 
    librt.so.1 => /lib64/librt.so.1 (0x0000003c69800000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000003c68400000) 

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

+0

+1使用LDD – pyCthon 2012-03-03 20:04:09

+0

你应该用'-v'选项查看如何在当前库搜索路径是这样的:连接G ++会显示哪些目录将被搜索和以何种顺序时。为了避免这个问题,尝试使用'-L'选项传递所需的路径。我的猜测是它在其他目录中的本地路径之前搜索标准路径。 – 2012-03-03 20:07:46

+0

我正在使用-L/home/nerozehl/local/lib – nerozehl 2012-03-03 20:13:09

回答

9

ldd不会告诉您可执行文件链接的内容 - 它会告诉您可执行文件在运行时将加载哪些共享对象。如果你想让它从/家/ nerozehl加载运行时,你需要做的几件事情之一:

  • 设置LD_LIBRARY_PATH包含的/ home/nerozehl/local/lib目录,当你运行程序

  • add/home/nerozehl/local/lib到ld.so.conf,这样它就会被所有人使用。但是,只适用于使用ld.so.conf的系统(如Linux)。

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

+0

什么程序会告诉我该文件链接到哪个库? – nerozehl 2012-03-04 03:14:48

+0

@nerozehl - 链接完成后无法分辨,因为该信息未存储在二进制文件中。 – 2012-03-04 05:50:46

1

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