如何在二进制文件中保留特定的符号?

我有一个静态库( my_static_lib ),我链接到一个可执行的二进制文件。 一些符号,但不是全部,在我的二进制文件中使用。

第二个动态加载的库( my_shared_lib )期望通过二进制符号注入从my_static_lib接收一些符号。 但是这些符号不被my_binary使用,所以它们被剥离了最终的bin文件。

所以,在运行时, my_shared_lib抱怨它找不到__my_stripped_symbols__并崩溃。

有没有办法强制链接器保持__my_stripped_symbols__ ? 我更喜欢可以干净地写在Makefile.am中的东西(autotools)

(-binary file makefile)
-L$(top_builddir)/static_lib -lmy_static_lib --magic-flag-to-keep-stripped-symbol

我不想将my_static_libmy_shared_lib链接my_static_lib ,因为它会在一组相当复杂的可执行文件/共享库的其他部分中产生奇怪的冲突。


my_static_lib链接到应用程序时,您需要使用--whole-archive选项。 它在ld选项文档中有记录。

如果你使用gcc链接,它看起来像这样:

-L$(top_builddir)/static_lib -Wl,-whole-archive -lmy_static_lib -Wl,-no-whole-archive

这将确保整个库保留,而不仅仅是您的可执行文件使用的特定功能。

您还需要确保符号被导出。 如果你的静态库中的符号没有被导出,你需要结合-fvisibility=hidden并使用__attribute__ ((visibility("default")))来标记你想要导出的符号。 您可以在gcc文档中阅读更多关于它的信息

链接地址: http://www.djcxy.com/p/53301.html

上一篇: How to keep a specific symbol in binary file?

下一篇: Symbols in C++ – are they exported in non