30

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

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

有没有办法在链接时强制 gcc 包含库中的所有静态对象?

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

4

2 回答 2

31

您可以使用,有关更多信息-Wl,--whole-archive -lyourlib,请参见手册页。ld

命令行上 -Wl,--whole-archive 之后提到的任何静态库都被完全包含在内,如果需要,您也可以再次关闭它,例如-Wl,--whole-archive -lyourlib -Wl,--no-whole-archive -lotherlib

于 2011-01-22T13:05:26.993 回答
2

利用:

g++ -u <SYMBOL_NAME> ...

注意-u是小写的

于 2018-09-27T23:14:57.810 回答