我有一个涉及一些静态初始化代码的库,需要在
或者,如果我使用
但是是否有折衷方案?我能否标记一些符号并使链接器始终将它们拾取到可执行文件中,而仅在需要时添加其余符号?
动机:我使用一些静态块在工厂中注册类;我希望将我的代码作为(非动态)库提供,而用户代码无需执行任何“魔法咒语”即可填充工厂。
一些相关问题:如何强制从C++(MSVC 11)的静态库中包含静态对象
如何强制gcc链接未引用的静态C++对象
如何强制gcc链接未使用的静态库
main()
之前运行。如果只编译所有翻译单元,则所有内容都正常工作,但是如果我提供一个静态库(.a
文件)并让用户链接它们的应用程序,则链接器会忽略执行我的静态初始化的符号。或者,如果我使用
-Wl,--whole-archive
选项指定GNU编译器集合(GCC)选项,则可以使链接器拾取静态库中的所有内容,即指定--whole-archive
选项。但是是否有折衷方案?我能否标记一些符号并使链接器始终将它们拾取到可执行文件中,而仅在需要时添加其余符号?
动机:我使用一些静态块在工厂中注册类;我希望将我的代码作为(非动态)库提供,而用户代码无需执行任何“魔法咒语”即可填充工厂。
一些相关问题:
--whole-archive
的替代方案? - tmm1--undefined
是唯一的其他解决方案。更多细节请参见 https://dev59.com/VKbja4cB1Zd3GeqPi5uQ#47186765 - tmm1