如何强制 gcc 链接未引用的静态 C++库中的对象
我使用的 C++ 库可以构建为共享库或静态库。 该库使用工厂技术,其中静态对象在程序启动并创建静态对象时注册自身。
只要使用共享库,这就可以正常工作。当使用静态版本时,任何静态对象都不会包含在最终程序中(因为它们没有被直接引用),因此它们的功能不可用。
有没有办法强制 gcc 在链接时包含库中的所有静态对象?
该库是开源的,如果有帮助的话我可以修改它。
I'm using a C++ library that can be built as either a shared or a static library.
This library uses a factory technique, where static objects register themselves when the program starts and the static objects get created.
This works fine as long as the shared library is used. When the static version is used, none of the static objects get included into the final program (because they aren't referenced directly) and thus their functionality isn't available.
Is there a way to force gcc to include all static objects from a library when linking?
The library is Open Source and I could modify it, if that helps.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用
-Wl,--whole-archive -lyourlib
,请参阅ld
的联机帮助页以获取更多信息。命令行上 -Wl,--whole-archive 之后提到的任何静态库都将完全包含在内,如果需要,您也可以再次将其关闭,例如
-Wl,--whole-archive -lyourlib - Wl,--no-whole-archive -lotherlib
You can use
-Wl,--whole-archive -lyourlib
, see the manpage forld
for more info.Any static libraries mentioned after -Wl,--whole-archive on the command line gets fully included, you can turn this off again too if you need to , as in e.g.
-Wl,--whole-archive -lyourlib -Wl,--no-whole-archive -lotherlib
使用:
注意-u是小写的
Use:
Note that -u is lowercase