Как связать приложение для динамической загрузки RTEMS?
Я использую RTEMS 4.11 и встроенные функции API POSIX для динамической загрузки образа программы в память. Образ программы загружается в RTEMS с использованием следующего кода:
void* handle = dlopen(prog_name, RTLD_NOW | RTLD_GLOBAL);
if (!handle)
printf("dlopen: %s\n", dlerror());
Я использую GCC, созданный RTEMS Source Builder, для компиляции объекта, расположенного в 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
программа. Есть идеи?
1 ответ
Решение
Оказывается, единственный важный вариант -c
(скомпилировать и собрать, но не ссылаться).
$ /opt/rtems-4.11/bin/sparc-rtems4.11-gcc test.c -c -o test.elf
$ # this now works