一尘不染

如何强制gcc链接库中未引用的静态C ++对象

linux

我使用的C ++库可以构建为共享库或静态库。该库使用一种工厂技术,该技术在程序启动时创建静态对象并注册静态对象。

只要使用共享库,此方法就可以正常工作。使用静态版本时,所有静态对象都不会包含在最终程序中(因为它们没有被直接引用),因此它们的功能不可用。

有没有一种方法可以在链接时强制gcc包含库中的所有静态对象?

该库是开源的,如果有帮助,我可以对其进行修改。


阅读 438

收藏
2020-06-03

共1个答案

一尘不染

您可以使用-Wl,--whole-archive -lyourlibld有关更多信息,请参见联机帮助页。

-Wl之后的所有静态库都将完全包含在内,命令行中的-whole-archive完全包含在内,如果需要,您也可以再次将其关闭,例如-Wl,--whole-archive -lyourlib -Wl,--no-whole-archive -lotherlib

2020-06-03