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

我正在使用一个C ++库,可以build立一个共享或静态库。 这个库使用工厂技术,在程序启动时静态对象注册自己,并创build静态对象。

只要共享库被使用,这工作正常。 当使用静态版本时,没有一个静态对象被包含到最终的程序中(因为它们没有被直接引用),因此它们的function是不可用的。

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

图书馆是开源的,我可以修改它,如果有帮助。

Solutions Collecting From Web of "如何强制gcc从库中链接未引用的静态C ++对象"

您可以使用-Wl,--whole-archive -lyourlib ,请参阅ld的联机帮助页获取更多信息。

在命令行中完整包含-Wl, – whole-archive之后提到的任何静态库都将完全包含在内,如果需要,也可以再次关闭此库,如eg -Wl,--whole-archive -lyourlib -Wl,--no-whole-archive -lotherlib

一种破解帮助我。 还是要包含头文件。

 // in the header with your class struct RegistrationHelper { RegistrationHelper(); }; static RegistrationHelper Helper; // in your cpp where you register your class RegistrationHelper::RegistrationHelper() {}