如何 link 应用程序通过 RTEMS 进行动态加载?
How do I link an application for dynamic loading by RTEMS?
我正在使用 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
(编译和 assemble 但不 link)。
$ /opt/rtems-4.11/bin/sparc-rtems4.11-gcc test.c -c -o test.elf
$ # this now works
我正在使用 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
(编译和 assemble 但不 link)。
$ /opt/rtems-4.11/bin/sparc-rtems4.11-gcc test.c -c -o test.elf
$ # this now works