【问题标题】:ldconfig is not seeing custom libraryldconfig 没有看到自定义库
【发布时间】:2012-02-17 04:29:47
【问题描述】:

我们使用一些 C++ 代码创建了一个自定义共享库

g++ -c -fPIC customTest.cpp

g++ -shared -o libcustomTest.so customTest.o

我们把它放在项目目录和我们的makefile中,我们有默认目标

main: main.o
    nvcc $^ -o main -lcustomTest -L.

这很好用。

问题是,我们想将我们的库移动到 /usr/lib/ 或任何任意文件夹,并且仍然让程序找到并使用它,但这并没有像我们希望的那样发生。

我们在根目录中有一个名为libTest 的文件夹,在该文件夹中我们放置了库customTest.so.0.1。然后我们在/etc/ 中编辑ld.so.conf,使其包含/libTest

然后我们进入程序文件的目录并运行 ldconfig -v

看起来像这样,但更大

libpanel.so.5 -> libpanel.so.5.9
libt1.so.5 -> libt1.so.5.1.2
libbluetooth.so.3 -> libbluetooth.so.3.11.4
libgck-1.so.0 -> libgck-1.so.0.0.0
libdca.so.0 -> libdca.so.0.0.0

创建了很多链接,但libcustomTest.so 不是其中之一。毫不奇怪,当我们运行 make 时找不到自定义库。

谁能指出我们做错了什么的正确方向?顺便说一句,我们使用的是 Ubuntu 11.10

【问题讨论】:

    标签: c++ linker shared ubuntu-11.10


    【解决方案1】:

    g++ -shared -o libcustomTest.so customTest.o

    这将创建一个未设置SONAME 的共享库。

    我们在根目录中有一个名为 libTest 的文件夹,在该文件夹中我们放置了库 customTest.so.0.1

    不要那样做。只需将 libcustomTest.so 复制到 /libTest 即可。

    创建了很多链接,什么没有,但 libcustomTest.so 不是其中之一。

    这是预期的结果。 ldconfig 创建从 SONAME 到实际实现二进制文件的符号链接。由于您没有设置SONAME,因此没有符号链接。

    除非您了解SONAME 的用途,否则也不要费心设置它(通过-Wl,--soname=... 标志)。在 Linux 上,SONAME 和外部库版本控制通常是错误的答案,因为符号版本控制提供了更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-08
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      相关资源
      最近更新 更多