交叉编译错误"臂无 - EABI-G ++无法找到入口符号QUOT; [英] Cross compile error "arm-none-eabi-g++ cannot find entry symbol"
问题描述
我有一个交叉编译的问题。
的#include<&stdio.h中GT;诠释的main()
{
的printf(你好\\ n);
返回0;
}
这是一个简单的Hello World code我用。
我用臂无 - EABI-G ++,Mentor Graphics的下载。这里是错误。
我不知道是遗漏了什么库。
/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 usingarm-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.earm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
, notarm-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 nolibc
directory.Download
arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
; here you'll find a folderarm-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屋!