问题描述
我试图构建一个共享库。让我们说libabc.so它采用另一个.so文件,说lib123.so(在/ usr / local / lib目录一个lib)。现在我用我的共享库libabc.so在我的应用程序。说我的-app.I想知道我应该链接这些二进制文件??我不希望我的应用程序内直接lib123.so链接。我的应用应该只libabc.so挂钩。我怎样才能做到这一点?
I am trying to build a shared library. Let us say libabc.so .It uses another .so file , say lib123.so (a lib in /usr/local/lib) .Now i am using my shared lib libabc.so in my application. say my-app.I want to know how i should link these binaries??i don't want to link my-app with lib123.so directly. my-app should be linked with only libabc.so. How can i do this?
在此先感谢。我使用的G ++编译器
Thanks in advance. I am using g++ compiler
推荐答案
假设 libabc.so
是的对象code文件 abc1.pic.o
和 abc2.pic.o
;那么你已经建立他们例如
Suppose that libabc.so
is obtained from posiition independent object code files abc1.pic.o
and abc2.pic.o
; then you have built them with e.g.
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
阅读也是。
正如你所见,你可以链接共享库 lib123.so
到自己的共享库 libabc.so
As you see, you may link a shared library lib123.so
into your own shared library libabc.so
然后用 LDD libabc.so
PS。不要使用 lib123.a
静态库(它应该是PIC)。如果您链接非PIC code到一个共享对象,你失去大部分的共享对象的优势,动态连接器的要做的搬迁不计其数。
PS. Don't use a static library for lib123.a
(it should be PIC). If you link non-PIC code into a shared object, you lose most of the advantages of shared objects, and the dynamic linker ld.so has to do zillions of relocations.
这篇关于链接共享库与Linux的其他共享库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!