链接静态库构建过程中共享一个?(Link a static library to a shared

2019-08-17 00:01发布

我有建立一个共享库GCC / Linux的一个问题。 目前,这个共享库与GCC / libtool的选项“-shared”创造,一切都很好。

现在有一些必须要加入到这一两个额外的,静态库(.A-文件)共享一个,因为它们提供一个由共享一个必需的一些功能。 添加具有选择这些静态库“-l”没有帮助,后来他们不是.so文件的一部分。

所以,我怎么能强迫GCC / libtool来真的,这些静态库的代码添加到共享库?

谢谢!

Answer 1:

您需要--whole-archive连接器选项在这种情况下,来命令链接到包括整个静态库的内容到共享库。

g++ -shared sample.o -o libSample.so -Wl,-whole-archive -lmylib1.a -lmylib2.a -Wl,-no-whole-archive

man ld

对于--whole存档选项后,在命令行中提到的每个归档,包括链接在归档中每个对象文件,而不是搜索需要的目标文件存档。 这通常用于打开的存档文件到一个共享库,迫使每个要被包括在所产生的共享库对象。 这个选项可以多次使用。

有两点需要注意利用gcc的这个选项的时候:首先,GCC不知道这个选项,那么你必须使用-Wl,-whole归档。 其次,不要忘记使用-Wl,你的档案的名单后-no-全存档 ,因为gcc将添加自己的档案给你的链接列表中,并且您可能不希望此标志来影响那些为好。



Answer 2:

你只需要--whole归档参数,以强制链接器包括图书馆,但它应该能够从无与伦比的标志推断其自身的需求。

确保在命令行中的任何静态库来他们的依赖对象的文件后,如:

g++ -Wl,-E -g -pipe -O2 -pipe -fPIC  myobjectfile.o mystaticlibrary.a -shared -o mylib.so


文章来源: Link a static library to a shared one during build?