在构建期间将静态库链接到共享库?

Elm*_*lmi 16 linux gcc shared-libraries static-libraries libtool

我在使用GCC/Linux构建共享库时遇到问题.目前这个共享库是使用GCC/libtool选项"-shared"创建的,一切都很好.

现在还有两个额外的静态库(.a文件)必须添加到此共享库中,因为它们提供了共享库所需的一些功能.使用选项"-l"添加这些静态库没有帮助,之后它们不是.so文件的一部分.

那么我如何强制GCC/libtool真正将这些静态库的代码添加到共享库中呢?

谢谢!

Dmi*_*kov 23

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

g++ -shared sample.o -o libSample.so -Wl,-whole-archive -lmylib1.a -lmylib2.a -Wl,-no-whole-archive
Run Code Online (Sandbox Code Playgroud)

来自man ld:

对于--whole-archive选项后命令行中提到的每个归档,请在链接中包含归档中的每个目标文件,而不是在归档中搜索所需的目标文件.这通常用于将存档文件转换为共享库,从而强制将每个对象包含在生成的共享库中.此选项可能不止一次使用.

从gcc使用此选项时的两个注意事项:首先,gcc不知道此选项,因此您必须使用-Wl,-whole-archive.其次,不要忘记在归档列表之后使用-Wl,-no-whole-archive,因为gcc会将自己的归档列表添加到您的链接中,您可能也不希望此标记也影响这些归档.