GCC没有链接正确的库

ner*_*ehl 9 c++ gcc g++ autotools ld

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

安装4.6.2并安装/usr/bin4.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
Run Code Online (Sandbox Code Playgroud)

住在哪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)
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*odd 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的系统或支持它的其他可执行格式.它还将路径硬编码到可执行文件中,这有点脆弱 - 如果将可执行文件移动到另一台计算机或重新安排文件系统,它可能会中断.