【发布时间】:2018-11-01 20:34:01
【问题描述】:
我正在学习如何在我的树莓派上编程。当我编译时,我使用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
【问题讨论】:
-
如果显示未找到测试,您是如何尝试运行它的?这意味着它找不到可执行文件。
./test? -
@SamiKuhmonen 完全正确,它似乎无法找到它,但生成了二进制文件
-
那么您能否说明您尝试运行可执行文件的具体方式?
-
@SamiKuhmonen 确定更新
-
不要通过传递共享对象的名称来传递库。相反,只需在所有目标文件之后传递
-lc即可链接到 libc。如果没有找到,也传递-L/usr/lib/arm-linux-gnueabihf告诉链接器在哪里找到它。
标签: linux assembly linker arm raspberry-pi3