我正在寻找以下问题的解决方案:
- 开发了一个在嵌入式设备上运行的C++软件模块(不可能使用基于文件的函数"dlopen"加载共享库),当模块运行时,它应该可以通过动态程序代码进行扩展
- 动态代码是在PC系统上编写(接口功能的实现)和交叉编译(gcc)的,然后通过总线系统发送到前面描述的在嵌入式设备上运行的软件模块
- 嵌入式设备上的软件模块应将接收到的动态程序代码保存在内存中,并应能够调用其中的功能
如何解决此问题?
我的第一种方法是:
- 在PC端将动态代码交叉编译并链接为共享库(ELF文件)
- (传输后)ELF文件在内存中的嵌入式设备上可用
- ELF文件的重新定位->在这里,我目前完全不知道如何做到这一点!有免费的图书馆来执行这种任务吗
我不知道我的ELF文件方法是否可行?如果是,我应该如何执行库迁移?
有什么更好/不同的方法来解决我的问题吗?
VxWorks可以做到这一点。与共享库不同,对象模块可以部分链接可重定位对象(GNU ld中的-r选项),然后在运行时加载到目标,在那里完成链接,解析到目标上现有代码的链接。