【问题标题】:ldconfig only links files starting with lib*?ldconfig 只链接以 lib* 开头的文件?
【发布时间】:2012-08-07 09:13:45
【问题描述】:

我正在努力让 MVTec Halcon 11 在 Ubuntu 上运行。一切都在正确的位置,但程序没有看到图像采集所需的动态库(相机单独工作正常,驱动程序已安装)

我将带有库的路径添加到 /etc/ld.so.conf 并运行 ldconfig -v 但在目录中存在的 28 个文件(所有“共享库”类型和 .so 扩展名)中,只有“lib*.so”文件是链接的。事实上,ldconfig 输出中的所有库都称为 lib*something。

奇怪的是,如果我在文件名前添加“lib”,它们就会被链接(当然软件不会这样)

为什么会这样?

【问题讨论】:

标签: linux shared-libraries ubuntu-12.04


【解决方案1】:

来自 ld.so 和 ld-linux.so 的人

文件部分:

lib*.so* 共享库

并且来自 glibc (./elf/ldconfig.c):

 712       /* Does this file look like a shared library or is it a hwcap
 713          subdirectory?  The dynamic linker is also considered as
 714          shared library.  */
 715       if (((strncmp (direntry->d_name, "lib", 3) != 0
 716             && strncmp (direntry->d_name, "ld-", 3) != 0)
 717            || strstr (direntry->d_name, ".so") == NULL)
 718           && (
 719 #ifdef _DIRENT_HAVE_D_TYPE
 720               direntry->d_type == DT_REG ||
 721 #endif
 722               !is_hwcap_platform (direntry->d_name)))
 723         continue;

看来您必须选择一个以 lib 开头的名称... libc 使用它来确定文件是否可能是共享库。

【讨论】:

  • 谢谢。尽管对我来说,有人会向您出售仅因为文件命名方式而无法运行的商业软件对我来说似乎很奇怪...
  • @mfloris 当我阅读if 语句时,我想到:d_name 以“lib”或“ld-”开头ord_name 以.so 结尾。
  • 嗯,是的,你说得对,我被宏搞糊涂了,快读了,午饭时间。
  • 那么为什么 ldconfig 会忽略我的 hAcq*.so 文件,除非我将它们重命名为 libhAcq*.so ?有什么解决方法吗?
  • 您不需要重命名文件。请注意,不要使用 -lfoo ,您可以只使用不带 -l 的完整路径,例如/home/bar/foo.so.2 。这将允许您使用非标准名称或特定版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2011-11-06
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
相关资源
最近更新 更多