gpt4 book ai didi

c++ - GCC 没有链接正确的库

转载 作者:可可西里 更新时间:2023-11-01 16:36:32 24 4
gpt4 key购买 nike

我的系统上安装了两个版本的 GCC 4.6.2 和 4.7.0。我正在运行 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 中(在我的 $PATH 中)。

当我编译时,一切正常,并且使用了较新的 header ,但是当我检查它链接的对象时:

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 使用我的新库。任何帮助将不胜感激。

最佳答案

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 或支持它的其他可执行格式的系统。它还将路径硬编码到可执行文件中,这有点脆弱——如果您将可执行文件移动到另一台机器或重新安排您的文件系统,它可能会损坏。

关于c++ - GCC 没有链接正确的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9549398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com