我正在尝试build立一个共享库。 让我们说libabc.so。它使用另一个.so文件,说lib123.so(在/ usr / local / lib中的lib)。现在我在我的应用程序中使用我的共享库libabc.so。 说我的应用程序。我想知道我应该如何链接这些二进制文件??我不想直接链接我的应用程序与lib123.so。 我的应用程序应该只链接到libabc.so。 我怎样才能做到这一点?
提前致谢。 我正在使用g ++编译器
假设libabc.so
是从独立的目标代码文件abc1.pic.o
和abc2.pic.o
; 那么你已经用例如
gcc -Wall -fPIC -O -g abc1.c -c -o abc1.pic.o gcc -Wall -fPIC -O -g abc2.c -c -o abc2.pic.o
和你一起构建libabc.so
gcc -shared abc1.pic.o abc2.pic.o -L/usr/local/lib -l123 -o libabc.so
我在 -l123
之前添加了-L/usr/local/lib
,因为我假设你有一个/usr/local/lib/lib123.so
共享库。
另请阅读程序库HowTo 。
如您所见,您可以将共享库lib123.so
链接到您自己的共享库libabc.so
然后检查ldd libabc.so
PS。 不要为lib123.a
使用静态库(它应该是PIC)。 如果将非PIC代码链接到共享对象中,则会丧失共享对象的大部分优点,动态链接程序ld.so必须执行无数次重定位。
当试图创建我自己的使用Berkeley DB的共享库时,我发现我必须将-ldb放在gcc命令的末尾,否则就会发现没有找到符号'db_create'。 这是在Cygwin下。
具体来说,这工作:
gcc -shared -o $ b / $ libfile nt _ *。o -ldb
这不起作用:
gcc -ldb -shared -o $ b / $ libfile nt _ *。o