c++ - 有没有办法从 ELF 中提取符号,并使用 LD 将另一个文件与先前 ELF 中定义的符号链接(symbolic link)在一起?

标签 c++ c gcc linker devkitpro

我正在使用 devKitPro 专门为 Nintendo Wii 创建一个应用程序。我想通过提供加载通过 objcopy -O 二进制传递的代码的能力来使我的应用程序模块化。我的问题是,我希望模块能够使用加载到内存中的主 ELF 中的符号。我尝试了各种方法,但还没有想出任何解决方案。

  • 我尝试使用 -Map,因为我认为它可以让我使用链接器映射,但这个想法失败了。

  • 我也试过编译成共享库,但这对我不起作用,因为链接器提示“只读段带有动态重定位”。

我真的需要帮助,因为我既不在 Windows 也不在 Linux 环境中。

最佳答案

您可以考虑使用 libdl 来执行此操作,它专门用于在运行时按名称加载符号。使用 libdl,您可以获得所有要作为初始化子例程的一部分调用的函数的句柄,然后在您的程序需要它们时使用它们。最重要的是,您不需要在编译时拥有要链接的库,因此您可以将其替换为任何定义了这些符号的 Sprite ,而无需重新编译。

关于c++ - 有没有办法从 ELF 中提取符号,并使用 LD 将另一个文件与先前 ELF 中定义的符号链接(symbolic link)在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439643/

相关文章:

c++ - 将派生对象地址分配给基指针和调用析构函数的机制

c++ - 如何检查返回值优化是否发生?

java - 何时使用指针,何时不使用?

c - 在 Windows 中轮询 CTS 线路的状态

c - 错误 C2143 : syntax error : missing ';' before 'type' when transferring pointer

linux - 为什么工具链名称有单独的 OS 和 EABI 字段。?

c++模板参数不明确

c - time.h 中的 tzset 和 daylight 全局变量解释

c - 海湾合作委员会错误 : extended registers have no high halves

c++ - 告诉编译器我希望变量始终存储在寄存器中的正确方法是什么?