如何通过RTEMS链接应用程序进行动态加载?

问题描述 投票:1回答:1

我正在使用RTEMS 4.11和内置的POSIX API函数将程序映像动态加载到内存中。使用以下代码将程序映像加载到RTEMS中:

void* handle = dlopen(prog_name, RTLD_NOW | RTLD_GLOBAL);
if (!handle)
    printf("dlopen: %s\n", dlerror());

我正在使用RTEMS Source Builder构建的GCC来编译位于内存文件系统中prog_name的对象。

我应该使用什么命令行来正确编译要以这种方式加载的单个C文件?

作为参考,我尝试了以下命令行选项,但出现了错误:

$ /opt/rtems-4.11/bin/sparc-rtems4.11-gcc test.c -c -o test.elf -shared -fPIC -nostdlib
$ # dlopen: global symbol not found: _GLOBAL_OFFSET_TABLE_

$ /opt/rtems-4.11/bin/sparc-rtems4.11-gcc test.c -o test.elf -fPIC -shared -nostdlib
$ # dlopen: ELF file contains program headers

我还尝试了一些其他组合,并使用rtems-ld程序。有任何想法吗?

c linker dlopen dlsym rtems
1个回答
0
投票

原来唯一重要的选择是-c(编译和汇编但不链接)。

$ /opt/rtems-4.11/bin/sparc-rtems4.11-gcc test.c -c -o test.elf
$ # this now works

Credit

© www.soinside.com 2019 - 2024. All rights reserved.