交叉编译错误“的手臂

我有一个关于交叉编译的问题。

#include <stdio.h>

int main()
{
    printf("hellon");
    return 0;
}

这是我用过的一个简单的hello世界代码。

我使用arm-none-eabi-g ++,从指导图形下载。 这是错误。 我不知道错过了什么。

/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/bin/ld: warning: cannot find entry symbol _start; defaulting to 00008018
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-abort.o): In function `abort':
abort.c:(.text+0x10): undefined reference to `_exit'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-signalr.o): In function `_kill_r':
signalr.c:(.text+0x1c): undefined reference to `_kill'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-signalr.o): In function `_getpid_r':
signalr.c:(.text+0x44): undefined reference to `_getpid'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text+0x18): undefined reference to `_sbrk'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-writer.o): In function `_write_r':
writer.c:(.text+0x20): undefined reference to `_write'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-closer.o): In function `_close_r':
closer.c:(.text+0x18): undefined reference to `_close'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-fstatr.o): In function `_fstat_r':
fstatr.c:(.text+0x1c): undefined reference to `_fstat'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-isattyr.o): In function `_isatty_r':
isattyr.c:(.text+0x18): undefined reference to `_isatty'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-lseekr.o): In function `_lseek_r':
lseekr.c:(.text+0x20): undefined reference to `_lseek'
/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-readr.o): In function `_read_r':
readr.c:(.text+0x20): undefined reference to `_read'
collect2: error: ld returned 1 exit status

这是编译器版本。

$ arm-linux-gnueabi-g ++ -v

使用内置规格。 COLLECT_GCC = / home / kang / Utils / arm-2013.05 / bin / arm-none-eabi -g ++ COLLECT_LTO_WRAPPER = / home / kang / Utils / arm-2013.05 / bin /../ libexec / gcc / arm-none-eabi / 4.7.3 / lto-wrapper目标:arm-none-eabi配置为:/scratch/jbrown/2013.05-arm-eabi-release/src/gcc-4.7-2013.05/configure --build = i686-pc-linux-gnu --host = i686-pc-linux-gnu --target = arm-none-eabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx -pch --enable-extra-sgxxlite- multilibs --with-gnu-as --with-gnu-ld --with-specs ='%{save-temps:-fverbose-asm} -D__CS_SOURCERYGXX_MAJ __ = 2013 -D__CS_SOURCERYGXX_MIN __ = 5 -D__CS_SOURCERYGXX_REV __ = 23%{O2:% {!fno-remove-local-statics:-fremove-local-statics}}%{O *:%{O | O0 | O1 | O2 | Os:;:%{!fno-remove-local-statics:-fremove -local-statics}}}'--enable-languages = c,c ++ --disable-shared --enable -lto --with-newlib --with-pkgversion ='Sourcery CodeBench Lite 2013.05-23'--with- bugurl = https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix = / opt / codesourcery --with-headers = yes --with -sysroot = / opt / codesourcery / arm-none-eabi -with-build-sysroot = / scratch / jbrown / 2013.05-arm-eabi-release / install / arm-none-eabi --with-gmp = / scratch / jbrown / 2013.05-ARM-EABI释放/ OBJ / PKG-2013.05-23臂 - 无 - EABI /臂2013.05-23臂-NONE-eabi.extras /主机库-i686的-PC-Linux的GNU / usr --with-mpfr = / scratch / jbrown / 2013.05-arm-eabi-release / obj / pkg-2013.05-23-arm-none-eabi / arm-2013.05-23-arm-none-eabi.extras / host- libs-i686-pc-linux-gnu / usr --with-mpc = / scratch / jbrown / 2013.05-arm-eabi-release / obj / pkg-2013.05-23-arm-none-eabi / arm-2013.05-23- arm-none-eabi.extras / host-libs-i686-pc-linux-gnu / usr --with-ppl = / scratch / jbrown / 2013.05-arm-eabi-release / obj / pkg-2013.05-23-arm- none-eabi / arm-2013.05-23-arm-none-eabi.extras / host-libs-i686-pc-linux-gnu / usr --with-host-libstdcxx =' - static-libgcc -Wl,-Bstatic, -lstdc ++, - Bdynamic -lm'--with-cloog = / scratch / jbrown / 2013.05-arm-eabi-release / obj / pkg-2013.05-23-arm-none-eabi / arm-2013.05-23-arm-none -eabi.extras / host-libs-i686-pc-linux-gnu / usr --with-libelf = / scratch / jbrown / 20 13.05-arm-eabi-release / obj / pkg-2013.05-23-arm-none-eabi / arm-2013.05-23-arm-none-eabi.extras / host-libs-i686-pc-linux-gnu / usr - -disable-libgomp --disable-libitm --enable-poison-system-directories --with-build-time-tools = / scratch / jbrown / 2013.05-arm-eabi-release / install / arm-none-eabi / bin --with-build-time-tools = / scratch / jbrown / 2013.05-arm-eabi-release / install / arm-none-eabi / bin线程模型:单个gcc版本4.7.3(Sourcery CodeBench Lite 2013.05-23)


你下载了错误的工具链。

arm-linux-gnueabi-g++是使用arm-none-eabi ,它用于裸机程序。 这不包含libc,即标准库(glibc或eglibc)不在此工具链中。

因此,您需要下载arm-none-linux-gnueabi工具链(即arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 ,而不是arm-2013.11-24-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 )。

要验证上述内容,请键入:

cd /home/kang/Utils/arm-2013.05/arm-none-eabi 

在这里你会发现只有bin include lib share ,并且没有libc目录。

下载arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 ; 在这里你会找到一个文件夹arm-2013.05/arm-none-linux-gnueabi/libc

您也可以通过编写来验证:

arm-linux-eabi-g++ -print-sysroot and 
arm-none-linux-gnueabi-g++ -print-sysroot

另请参阅前面的问题:如何在交叉编译时使用外部库?


我正在使用arm-linux-gnueabi-g ++。 它下载了指导图形。

这是错误的。 你所有的输出都表明Mentor Graphics已经打包了一个arm-none-gnueabi工具链,并错误地命名为arm-linux-gnueabi (它甚至不适合命名约定)。

对不起,我打错了我的编译器。 我使用arm-none-eabi-g ++

获取arm-none-linux-gnueabi工具链(即定位GNU / Linux而不是EABI)的版本。

这个包含与Linux操作系统连接的GCC运行时。 你现在缺少的所有功能都是该界面的一部分。

链接地址: http://www.djcxy.com/p/86917.html

上一篇: Cross compile error "arm

下一篇: Use configure file to generate makefile