交叉编译错误"臂无 - EABI-G ++无法找到入口符号QUOT; [英] Cross compile error "arm-none-eabi-g++ cannot find entry symbol"

查看:898
本文介绍了交叉编译错误"臂无 - EABI-G ++无法找到入口符号QUOT;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 的#include<&stdio.h中GT;诠释的main()
{
    的printf(你好\\ n);
    返回0;
}

这是一个简单的Hello World code我用。

我用臂无 - EABI-G ++,Mentor Graphics的下载。这里是错误。
我不知道是遗漏了什么库。

<$p$p><$c$c>/home/kang/Utils/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/bin/ld:警告:无法找到入口符号_start;默认为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):在函数'中止':
。abort.c :(文字+ 0×10):未定义的参考`_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):在功能上`_kill_r:
signalr.c :(文字+ 0x1C处):未定义的参考`_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):在功能上`_getpid_r:
。signalr.c :(文字+ 0x44进行):未定义的参考`_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):在功能上`_sbrk_r:
。sbrkr.c :(文字+为0x18):未定义的参考`_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):在功能上`_write_r:
。writer.c :(文字+ 0x20的):未定义的参考`_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):在功能上`_close_r:
。closer.c :(文字+为0x18):未定义的参考`_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):在功能上`_fstat_r:
。fstatr.c :(文字+ 0x1C处):未定义的参考`_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):在功能上`_isatty_r:
。isattyr.c :(文字+为0x18):未定义的参考`_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):在功能上`_lseek_r:
。lseekr.c :(文字+ 0x20的):未定义的参考`_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):在功能上`_read_r:
。readr.c :(文字+ 0x20的):未定义引用'_read'
collect2:错误:LD返回1退出状态

这是编译器的版本。

$臂Linux的gnueabi-G ++ -v


  

使用内置的规格。
  COLLECT_GCC = /家庭/康/ utils的/ ARM-2013.05 /斌/臂无 - EABI-G ++
  COLLECT_LTO_WRAPPER = /家庭/康/ utils的/ ARM-2013.05 / bin中/../的libexec / GCC / ARM-NONE-EABI / 4.7.3 / LTO-包装
  目标:手臂无 - EABI配置有:
  /scratch/jbrown/2013.05-arm-eabi-release/src/gcc-4.7-2013.05/configure
  --build = i686的-PC-Linux的GNU主机= i686的-PC-Linux的GNU --target =臂无 - EABI --enable-线程--disable-libmudflap --disable-libssp --disable- libstdcxx-PCH --enable-EXTRA-sgxxlite-一个multilib --with-GNU-作为--with-GNU-LD --with-规格='%{保存-临时工:-fverbose-ASM} -D__CS_SOURCERYGXX_MAJ __ = 2013 -D__CS_SOURCERYGXX_MIN__ = 5 -D__CS_SOURCERYGXX_REV __ = 23%{O2:%{FNO-删除本地-静:-fremove-本地静态}!}%{○*:%{Ø| O0 | 01 | O2 |操作系统:;:%{ !FNO - 删除 - 本地静:
  -fremove本地-静态}}}--enable-语言= C,C ++ --disable共享--enable-LTO --with-newlib --with-pkgversion ='的Sourcery codeBench精简版2013.05-23 --with-bugurl = https://sourcery.mentor.com/GNUToolchain/ --disable -nls - preFIX =的/ opt / codesourcery --with-标题= YES --with-SYSROOT =的/ opt / codesourcery / ARM-NONE-EABI --with-集结SYSROOT = /scratch/jbrown/2013.05-arm-eabi-release/install/arm-none-eabi
  --with-gmp=/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-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宿主libstdcxx =' - 静态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/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
  --disable-libgomp --disable-libitm --enable-毒系统目录--with-集结时间的工具= /刮/ jbrown / 2013.05臂-EABI释放/安装/臂无 - EABI /箱子
  --with-集结时间的工具= /刮/ jbrown / 2013.05臂-EABI释放/安装/臂无 - EABI /箱
  线程模型:单gcc版本4.7.3(的Sourcery codeBench精简版
  2013.05-23)



解决方案

您下载了错误的工具链。

ARM-Linux的gnueabi-G ++ 这是用于裸使用 ARM-NONE-EABI ,建金属节目。这不包含的的libc 的即标准库(glibc的或eglibc)不在此工具链present。

所以,你需要下载 ARM-NONE-Linux的gnueabi 工具链(即 ARM-2013.05-24臂-没有Linux的-gnueabi-i686的-PC-Linux的gnu.tar.bz2 ,而不是 ARM-2013.11-24臂无 - EABI-i686的-PC-Linux的gnu.tar操作.bz2
)。

要验证上述,类型:

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

在这里,你会发现只有斌包括LIB份额和。没有的libc 目录

下载 ARM-2013.05-24臂-NONE-Linux的gnueabi-i686的-PC-Linux的gnu.tar.bz2 ;在这里你会发现一个文件夹臂2013.05 / ARM-NONE-Linux的gnueabi /的libc

您还可以通过书面验证:

  ARM-Linux的EABI-G ++ -print-SYSROOT和
臂无-Linux的gnueabi-G ++ -print-SYSROOT

也可参考此previous问题:<一href=\"http://stackoverflow.com/questions/18900855/how-to-work-with-external-libraries-when-cross-compiling/18920937#18920937\">how与外部库工作的时候交叉编译?

I have a problem about cross compile.

#include <stdio.h>

int main()
{
    printf("hello\n");
    return 0;
}

this is a simple hello world code I used.

I'm using arm-none-eabi-g++, downloaded from mentor graphics. Here is the error. I don't know what lib is missed.

/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

and this is compiler version.

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

Using built-in specs. 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 Target: arm-none-eabi Configured with: /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-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-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/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 --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 Thread model: single gcc version 4.7.3 (Sourcery CodeBench Lite 2013.05-23)

解决方案

You downloaded the wrong toolchain.

arm-linux-gnueabi-g++ is built using arm-none-eabi, which is used for bare metal programs. This does not contain libc i.e the standard libraries (glibc or eglibc) are not present in this toolchain.

So, you need to download the arm-none-linux-gnueabi toolchain (i.e arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2, not arm-2013.11-24-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 ).

To verify the above, type:

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

Here you will find only bin include lib share, and no libc directory.

Download arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2; here you'll find a folder arm-2013.05/arm-none-linux-gnueabi/libc.

You can also verify by writing:

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

Also refer to this previous question: how to work with external libraries when cross compiling?

这篇关于交叉编译错误&QUOT;臂无 - EABI-G ++无法找到入口符号QUOT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆