【问题标题】:Linux : error loading libraries from /usr/local/libLinux:从 /usr/local/lib 加载库时出错
【发布时间】:2013-12-15 03:13:15
【问题描述】:

我有一个运行 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,我可以正常运行我们的二进制文件。

谁能提出什么问题?

【问题讨论】:

  • 错误的架构? 文件 libboost_log.so.1.43.0 告诉你什么?
  • 尝试使用LD_DEBUG=all 运行您的二进制文件,看看输出是否包含任何线索。 (LD_DEBUG=help 可能有助于减少输出。)
  • 您是否为硬浮点链接器设置 /etc/ld.so.conf.d/?
  • 感谢 cmets 伙计们。 @tink libboost 文件适用于我的目标 ARMHF。 auselen 不知道你的意思。斯科特我正在试验这些选项,还没有解决方案。

标签: linux path arm shared-libraries


【解决方案1】:

谁能提出什么问题?

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

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

也许你有一个错字,或者一个尾随空格,或者一些东西

【讨论】:

  • 我的 etc/ld.so.conf 包含“include /etc/ld.so.conf.d/*.conf”,并且我们的软件安装添加了一个额外的 .conf 文件“/usr/local/lib”的内容。我在文件中看不到任何尾随空格或其他格式错误的内容。
  • 我删除了所有自定义构建的包,然后重新添加它们,问题就消失了。谢谢大家的提示。
猜你喜欢
  • 2012-02-19
  • 2018-09-02
  • 2021-05-25
  • 2014-09-28
  • 2021-07-16
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多