我们使用
从一些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
。然后,我们在ld.so.conf
中修改了/etc/
,其中包含/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
答案 0 :(得分:1)
g ++ -shared -o libcustomTest.so customTest.o
这将创建一个未设置SONAME
的共享库。
我们在root中创建了一个名为libTest的文件夹,在该文件夹中我们放了我们的库customTest.so.0.1
不要那样做。只需将libcustomTest.so复制到/ libTest中,然后完成它。
创建了很多链接,但是没有,但是libcustomTest.so不是其中之一。
这是预期的结果。 ldconfig
创建从SONAME
到实际实现二进制文件的符号链接。由于您没有设置SONAME
,因此没有符号链接。
除非您了解 SONAME
的用途,否则请不要设置它(通过-Wl,--soname=...
标志)。在Linux上,SONAME
和外部库版本控制通常是错误的答案,因为符号版本控制提供了更好的方法。