【问题标题】:/usr/bin/ld: warning: abc.so, needed by xyz.so not found (try using -rpath or -rpath-link)"/usr/bin/ld:警告:abc.so,找不到 xyz.so 所需(尝试使用 -rpath 或 -rpath-link)”
【发布时间】:2011-06-22 05:43:32
【问题描述】:

我正在构建一个 C++ 应用程序,使用 Netbeans 6.9 作为我的 IDE。我有一个 C++ 库,它是一个纯 C 库的包装器。

我已将文件正确添加到项目中(使用添加库文件选项)。这是 g++ 和链接器产生的输出:

g++  -o dist/Debug/GNU-Linux-x86/testluaembed build/Debug/GNU-Linux-x86/src/main.o build/Debug/GNU-Linux-x86/src/LuaBinding.o -L../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86 -L../../mainline/tanlib++/dist/Debug/GNU-Linux-x86 -L/usr/lib ../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86/libtanlib_core.so ../../mainline/tanlib++/dist/Debug/GNU-Linux-x86/libtanlibpp.so /usr/lib/liblua5.1.a /usr/lib/libtolua++5.1.a /usr/local/boost_1_45_0/stage/lib/libboost_filesystem.a /usr/local/boost_1_45_0/stage/lib/libboost_system.a 
/usr/bin/ld: warning: libtanlib_core.so, needed by ../../mainline/tanlib++/dist/Debug/GNU-Linux-x86/libtanlibpp.so, not found (try using -rpath or -rpath-link)
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `gctm':
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/testluaembed] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

我在 C++ 包装库上运行 ldd 并得到以下输出:

$ldd libtanlibpp.so 
    linux-vdso.so.1 =>  (0x00007fff123c0000)
    libtanlib_core.so => not found
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fe4f0fde000)
    libm.so.6 => /lib/libm.so.6 (0x00007fe4f0d5a000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fe4f0b43000)
    libc.so.6 => /lib/libc.so.6 (0x00007fe4f07c0000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe4f15ee000)

因此,尽管该文件存在于我的机器上,但它似乎不在我的库缓存中。我尝试使用 ldconfig,但问题仍然存在。有关如何解决此问题的任何想法?

【问题讨论】:

    标签: c++ c gcc ld


    【解决方案1】:

    确保libtanlib_core.so所在的目录配置在/etc/ld.so.conf(或/etc/ld.so.conf.d/)中——否则ldconfig将找不到它。

    【讨论】:

    • 我怀疑这是配置问题。如何“确保 libtanlib_core.so 所在的目录在 /etc/ld.so.conf 中配置”?你能解释一下我如何将该目录放在 ld.so.conf 中吗?我只是手动编辑文件,还是需要使用工具?
    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 2012-11-10
    • 2010-12-21
    • 2011-07-16
    • 2012-05-17
    • 2020-04-14
    • 2012-03-26
    • 2018-12-13
    相关资源
    最近更新 更多