КАК ассемблер ARM Raspberry PI 3 связывает с библиотеками C? - PullRequest
0 голосов
/ 01 ноября 2018

Я учусь программировать на своем Raspberry Pi. Когда я компилирую, я использую команды as и ld для компиляции и компоновки. Я хочу связать с libc и использовать malloc, но не использовать gcc в качестве моего компилятора. Я пытался связать с /usr/lib/arm-linux-gnueabihf/libc.so

Вот что я напечатал (изменить):

as test.s -o test.o
ld -o test test.o /usr/lib/arm-linux-gnueabihf/libc.so
./test

он скомпилирован и связан, но когда я пытаюсь его запустить, он говорит, что тест не найден

Вот test.s:

.global _start
.extern malloc

_start:
    mov R0, #4
    bl malloc
    mov R0, #0
    mov R7, #1
    svc 0
.end

Это нормально?
Или мне нужно сделать что-то еще?
Любая помощь будет оценена?

РЕДАКТИРОВАТЬ вот что я делаю (не забудьте инициализировать C, если используете некоторые из его функций!):

ld -o test /usr/lib/arm-linux-gnueabihf/libc.so test.o -dynamic-linker /lib/ld-linux-armhf.so.3

1 Ответ

0 голосов
/ 02 ноября 2018

Вы должны передать путь к динамическому компоновщику в ld с помощью -dynamic-linker /lib/ld-linux-armhf.so.3, иначе он использует /usr/lib/ld.so.1, которого не существует.

Примечание. Несмотря на то, что это дает возможность запуска, который можно запустить, я сомневаюсь, что он работает правильно, поскольку libc используется, но не инициализируется.

...