Как связать приложение для динамической загрузки 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

wvdschel

Другие вопросы по тегам