Как связать приложение для динамической загрузки RTEMS? - PullRequest
0 голосов
/ 17 сентября 2018

Я использую RTEMS 4.11 и встроенные функции POSIX API для динамической загрузки образа программы в память.Образ программы загружается в 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 Ответ

0 голосов
/ 18 сентября 2018

Оказывается, единственной важной опцией является -c (компилировать и собирать, но не связывать).

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

Кредит

...