Linux:从/ usr / local / lib加载库时出错

时间:2013-11-29 01:22:08

标签: linux path arm shared-libraries

我有一个运行Debian Wheezy的ARM嵌入式系统。我们自定义编写的应用程序的一些功能分为共享库文件。我们将共享库文件存储在/ usr / local / lib。

我看到的问题是我们的一个二进制文件没有正确启动,因为它无法加载/ usr / local / lib中的一个共享库:

  

/ usr / local / bin / daemon_watchdog:加载共享库时出错:libroots-base.so.5.3:无法打开共享对象文件:没有这样的文件或目录

文件libroots-base.so.5.3存在于/ usr / local / lib中。应该搜索/ usr / local / lib库,因为我们在/etc/ld.so.conf.d/目录中添加了一个额外的文件,专门包含/ usr / local / lib。我还运行ldconfig来刷新缓存。

一个线索可能是文件libroots-base.so.5.3本身依赖于其他共享库。如果我在/ usr / local / lib中运行“ldd libroots-base.so.5.3”,它会显示几个引用的库没有被选中:

    libboost_log.so.1.43.0 => not found
    libboost_thread.so.1.43.0 => not found
    libboost_system.so.1.43.0 => not found
    libPocoUtil.so.11 => not found
    libPocoFoundation.so.11 => not found
    libPocoDataSQLite.so.11 => not found
    libPocoData.so.11 => not found
    libgthread-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libgthread-2.0.so.0

(0x402f1000)         libdbus-glib-1.so.2 => /usr/lib/arm-linux-gnueabihf/libdbus-glib-1.so.2 (0x4005c000)

但是,列为未找到的文件肯定存在于/ usr / local / lib中,例如

-rw-r--r-- 1 root root 821784 Nov 22 21:29 libboost_log.so.1.43.0

此外,如果我在系统启动后手动将LD_LIBRARY_PATH设置为/ usr / local / lib,我可以正常运行二进制文件。

任何人都可以提出可能出错的建议吗?

1 个答案:

答案 0 :(得分:4)

  

任何人都可以提出可能出错的建议吗?

如果设置LD_LIBRARY_PATH解决了问题,则几乎可以肯定您没有正确地将/usr/local/lib添加到/etc/ld.so.conf.d/

您添加到/etc/ld.so.conf.d/中的哪个文件?

也许您有拼写错误或尾随空格或某事