gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:46:17 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

您的问题未明确说明:您从未说明您正在构建的平台、您使用的链接器等。

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

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

关于c++:运行时链接共享对象与主机应用程序,符号表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36128464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com