假设我想创建一个动态库dynamic.so
,但我的代码引用了一个存在于其他静态库中的函数static.a
。自然地,如果我编译并使用g++
和-shared
选项链接,dynamic.so
将期望引用的函数在其他一些动态库中实现,我必须在运行时将其与dynamic.so
. 换句话说,只要我这样做就会很高兴-l static
(模数语法)。
但是由于那个其他库实际上是一个静态库,所以我不能这样做。假设我也无法在主程序的编译时链接静态库,但我被迫只使用动态库。所以我真正想要的是从static.a
in 中包含引用函数的编译代码dynamic.so
。
这个对相关问题的回答建议使用--whole-archive
包含static.a
在dynamic.so
. 但是,就我而言,static.a
是巨大的。而且我真的不需要全部,我只需要一个函数定义。
This answer to another question解释了在编译时链接到静态库意味着只有实际引用的代码才会包含在二进制文件中。好吧,这正是我想要为我的单个函数参考做的!我真的不想要整个静态档案在那里。
但我怎样才能做到这一点?如何仅包含static.a
in的必需部分dynamic.so
?