链接器无法找到crti.o和其他目标文件

时间:2017-11-11 23:38:47

标签: gcc makefile linker-errors

我正在使用this Makefile进行一项青少年项目,即使crti.ocrtbegin.o中有crt0.o/usr/lib/x86_64-linux-gnuLIBRARY_PATHLD_LIBRARY_PATHmake中都有该目录,运行[LD] balloons-Parafoil.elf /afs/.ir.stanford.edu/users/e/r/ericmark/Development/balloons- Parafoil/tools/arm/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm- none-eabi/bin/ld: cannot find crti.o: No such file or directory /afs/.ir.stanford.edu/users/e/r/ericmark/Development/balloons- Parafoil/tools/arm/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm- none-eabi/bin/ld: cannot find crtbegin.o: No such file or directory /afs/.ir.stanford.edu/users/e/r/ericmark/Development/balloons- Parafoil/tools/arm/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm- none-eabi/bin/ld: cannot find crt0.o: No such file or directory collect2: error: ld returned 1 exit status make: *** [balloons-Parafoil.elf] Error 1 时仍然出现以下错误:

{{1}}

我应该注意到,这个错误发生在我尝试过的Ubuntu机器上,而不是我正在开发的macOS机器上。

1 个答案:

答案 0 :(得分:0)

crti.o等C运行时文件是高度机器特定的。您不能使用/usr/lib/x86_64-linux-gnu中的x86-64版本来创建ARM二进制文件。您需要这些文件的版本,以用于要定位的32位ARM的变体。查看the Canonical downloads page,它看起来不再像当前的Ubuntu支持32位ARM,但是在启用相关的Debian存储库后,您可以安装libc6-dev:armel。您使用的工具链也可能未正确设置。

此外,如果您的ARM工具链以裸机为目标,那么glibc对您没用,因为glibc假设它可以使用正在运行的Linux内核。