c++:运行时链接共享对象与主机应用程序,符号 table 问题

c++: runtime-linking shared object with host app, symbol table issue

我有一个 hostapp.cpp 在 运行 时加载一个 object.so 共享对象,共享对象仅使用来自主机应用程序的所需 .h 文件编译,但是在 运行 时,它需要访问这些功能(存在于主机应用程序中)。

使用 -rdynamic 编译主机应用程序显然解决了这个问题,但它不必要地将对象暴露给主机应用程序的完整符号 table,即使它只需要解决其中的几个问题.

如何准确指定共享对象将识别哪些主机应用程序符号?

编辑: 我正在使用 GNU 工具链在 GNU/Linux 上构建和 运行ning。

您的问题未明确说明:您从未说明您正在构建的平台是什么,您使用的 link 是什么,等等。

假设您为 Linux 构建,您可以使用以下方法之一指定要从主可执行文件导出的符号:

  1. 如果您使用的是 gold(GNU ELF linker),--export-dynamic-symboldo 您所需要的。
  2. 如果您使用的是 binutils linker,您可以使用 linker 版本脚本来执行相同的操作 (example)。
  3. 您可以用__attribute__((visibility("default")))标记要导出的符号,用-fvisibility-hidden编译,用-rdynamic标记link。这应该会隐藏大部分符号,但如果您在无法重新编译的库中 link,则效果不佳。