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

发布于 2024-10-13 01:54:22 字数 208 浏览 8 评论 0原文

我使用的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心碎的声音 2024-10-20 01:54:22

您可以使用 -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 for ld 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

别靠近我心 2024-10-20 01:54:22

使用:

g++ -u <SYMBOL_NAME> ...

注意-u是小写的

Use:

g++ -u <SYMBOL_NAME> ...

Note that -u is lowercase

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文