交叉编译几种常见的报错
交叉编译环境以及开发板上-binsh:.hello:notfound(使用arm-linu。。。

交叉编译环境以及开发板上-binsh:.hello:notfound(使⽤arm-linu。
⽬标板是S3C2440.⾄于交叉编译环境的搭建就不多说了,⽹上很多教程.搭建好了交叉编译环境后,第⼀件事就是传说中的”Hello,World!”.⼀. 主机编译环节我使⽤的系统是ubuntu10.04,搭建好交叉编译环境后,终端输⼊arm-linux-gcc -v能够正常显⽰版本信息,但是输⼊sudo arm-linux-gcc -v后却显⽰命令⽆法找到.我试过很多种⽅法,⽐如sudo -s切换到root后,编辑$PATH,将编译器路径加⼊.然后exit到普通⽤户.仍然不能执⾏sudo arm-linux-gcc -v. 这⾥如果哪位⼤⽜知道是什么原因的可以留⾔告诉我,谢谢:)由于编译.c的⽂件后,要产⽣新的⽂件,因此要super的权限.⼜不能使⽤sudo arm-linux-gcc,于是可以先sudo -s到root⽤户,再使⽤arm-liunux-gcc来进⾏编译.⼆. ⽬标板执⾏环节我是使⽤FTP在主机和⽬标板之间传送⽂件.传送过去后要注意改变权限.这⾥要注意⼏点:1. 要确定ftp过来后的⽂件的默认的存放路径.这个只要在⽬标机的终端机上确认下即可.(这个地⽅没有确认可能就会显⽰找不到命令)2. 传送过来的⽂件要更改权限才能运⾏.可以⽤:chmod 777 hellochmod +x hello3. 执⾏./hello这时,报错:-/bin/sh: ./hello: not found三. 问题排除⽤过绝对路径也试过之后就确定并不是⽂件是否存在的问题,⽽是这个⽂件并不能被执⾏.GOOGLE之后可以发现,排除上⾯提到问题后,就将问题定位到动态链接库上.于是在主机上⽤arm-linux-gcc -static -o 来进⾏静态编译.然后将新产⽣的⽂件传到⽬标板上.可以发现通过静态编译的⽂件明显⽐动态编译的要⼤.然后再次执⾏./hello 可以看到屏幕上出现了久违的Hello,World!问题到这⾥还没有完,我们可以再思考下怎么彻底解决,⽽不是每次都使⽤静态编译.既然是动态库引起的问题,那么应该和编译器的版本有关.在安装编译环境的时候同时安装了3.4.1和4.3.3两个版本.⽤户⼿册上说其中3.4.1是⽤来编译u-boot的,4.3.3版本是⽤来编译Linux内核和Qtipia的,两个版本均可以⽤来编译应⽤程序.既然我们的内核使⽤4.3.3编译的,⽽我们刚才编译hello是使⽤3.4.1编译的,那么会不会是这个原因呢?于是我们试⼀下,将$PATH中的原来包含3.4.1/bin 的路径改为 4.4.3/bin . 修改的⽅法⽹上有很多.(直接export PATH=”想要的路径”)再次编译,下载.⽬标板上执⾏,成功显⽰”Hello,World!”.可以看到系统中动态库的⽀持和编译器还是有关的./lzjsky/p/3730183.html。
关于在ubuntu16.0464位系统上安装交叉编译工具出现错误的解决方法

关于在ubuntu16.0464位系统上安装交叉编译工具出现错误的解决方法https:///hanshengfei/article/details/78702436 utm_source=app一.安装交叉编译工具详细的安装过程请移步我的另外一个帖子:/hanshengfei/article/details/78669298 二。
安装之后执行命令 arm-linux-gcc -v出现找不到编译工具原因是交叉编译工具是32 位的但是咱们的系统是64位的这就需要下载安装一下32位的兼容库,但是ubuntu16.04已经不支持ia32-libs的软件包,而是使用了lib32ncurses5 和lib32z1软件包做替换,所以我们应该在ubuntu16.04版本中执行:(安装的时候最好先执行一下 sudo get-apt update 更新一下软件包,否则可能会出现Unable to locate package的错误)sudo apt-get install lib32ncurses5sudo apt-get install lib32z1安装完之后再执行一下命令 arm-linux-gcc -v 就可以了三.安装完之后写个小程序来测试一下vi hello.c1.#include <stdio.h>2.int main()3.{4.printf("hello linux!!\n");5.reurn 06.}保存编译:arm-linux-gcc -o hello hello.c这个时候出现:这是说找不到这个库那么安装一下这个库:sudo apt-get install lib32stdc++6安装之后再执行命令 arm-linux-gcc -o hello hello.c出现可执行文件。
Cygwin下用crosstool-ng 编译交叉工具链的常见错误及解决办法

Cygwin下用crosstool-ng 编译交叉工具链的常见错误及解决办法2011-02-28 21:221、配置crosstool-ng产生的错误1.1 ncurses headers files were not foundChecking for 'ncurses/ncurses.h'... noChecking for 'ncurses/curses.h'... noChecking for 'ncurses.h'... noChecking for 'curses.h'... noncurses headers files were not found解决方法:安装:ncurses,、libncurses-devel1.2 flex none foundChecking for 'flex'... Noflex: none foundEither you are missing entirely the needed tool,or the version you have is too old.configure: Bailing out...解决方法:安装:flex,flexdll1.3 automake 1.10 or above was not foundChecking for 'automake'... noautomake 1.10 or above was not foundEither you are missing entirely the needed tool,or the version you have is too old.configure: Bailing out...解决方法:安装:automake1.4 libtool 1.5.26 or above was not foundChecking for 'libtool'... nolibtool 1.5.26 or above was not foundEither you are missing entirely the needed tool,or the version you have is too old.You can give the path to this tool using: --with-libtool=PATHconfigure: Bailing out...解决方法:安装:libtool注:在配置crosstool-NG时,出现的类似“XXX:none found”的错误,都可以是该工具没有安装,把该工具安装上,重新配置即可。
常见gcc 编译错误整理

常见gcc 编译错误整理常见gcc 编译错误整理(开始) 11 error: expected expression before 'else' else之前无表达式。
2 error: lvalue required as left operand of assignment 左值问题。
3 error: invalid storage class for function 'XXXXXX' 在文件的某个地方,丢失了一个大括号‘}’。
常见gcc编译警告整理(开始)1、warning: no newline at end of file 在文件最后一行加上回车键解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing abackslash/newline sequence.c/c++代码的每一行后面有一个“结束符”,也就是newline。
避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。
交叉编译几种常见的报错.doc

交叉编译几种常见的报错由于是第一次交叉编译,不知道会出现什么问题,思路就是先把gcc和ld都改成arm的,然后遇到什么问题在解决什么问题,以下过程都是在这个思路下进行。
1.指定arm的编译器和连接器:只是把gcc改为arm-none-linux-gnueabi-gcc,ld改为arm-none-linux-gnueabi-ld,其他的都没有修改。
出现以下错误:arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe forcross-compilationarm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.so when searchingfor -lfreetypearm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.a when searchingfor -lfreetypearm-none-linux-gnueabi-ld: cannot find -lfreetype分析原因是:链接的这些库文件都是在PC编译器下编译出来的,现在把它们和用arm-none-linux-gnueabi-gcc编译出来的文件做链接,当然会出错。
解决方法:这些库重新用arm-gcc重新编译生成相应的库。
下面使用是重新编译库文件的过程:重新编译freetype根据交叉编译的文档,我创建了一个文件夹/usr/local/arm-linux来存放编译后的库文件。
执行:./configure –host=arm-none-linux-gnueabi –prefix=/usr/local/arm-linux注意:host的参数应该是交叉编译环境的前缀。
GCC常见错误解析

GCC常见错误解析一、错误类型第一类∶C语法错误错误信息∶文件source.c中第n行有语法错误(syntex errror)。
这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中第n行及该行之前的程序,有时也需要对该文件所包含的头文件进行检查。
有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,此时要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语言的基本教材。
第二类∶头文件错误错误信息∶找不到头文件head.h(Can not find include file head.h)。
这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。
第三类∶档案库错误错误信息∶连接程序找不到所需的函数库,例如∶ld: -lm: No such file or directory.这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定档案库及目录的名称并修改程序中及编译选项中的名称。
第四类∶未定义符号错误信息∶有未定义的符号(Undefined symbol)。
这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc 连接选项中的-l和-L项。
排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。
Bash和Dash-在ubuntu上安装交叉编译器出错时需注意

Bash和Dash-在ubuntu上安装交叉编译器出错时需注意安装交叉编译器出问题./arm-2010q1-202-arm-none-linux-gnueabi.bin错误信息如下;Checking for required programs: awk grep sed bzip2 gunzip ====================================== =========================Error: DASH shell not supported as system shell====================================== =========================The installer has detected that your system uses the dash shellas /bin/sh. This shell is not supported by the installer.You can work around this problem by changing /bin/sh to be asymbolic link to a supported shell such as bash.For example, on Ubuntu systems, execute this shell command:% sudo dpkg-reconfigure -plow dashInstall as /bin/sh? NoPlease refer to the Getting Started guide for more information,or contact CodeSourcery Support for assistance.Google搜:Ubuntu下sh默认指向dash 。
echo $SHELL --> /bin/bashtype sh --> /bin/sh然后我到/bin下看了有"sh -> dash",原来sh是/bin/dash的链接。
交叉编译总结‘

喜欢里面的一句词:我的快乐会回来的。
此刻,我在安装目录的bin下找到了linphonec这个可执行文件,现在就需要向老大要个板子烧上去看效果然后再进行伟大的修改工作。
这个交叉编译的过程我持续了两个星期,当然中间有放弃的阶段,转而研究josua.c这个程序,这是个依赖osip库写的一个简单应用,因为我安装的库的版本与这个程序不匹配,所以为了兼容也做了很多的工作。
老大说,你这样不行。
于是昨天下午我重新振作,换系统换交叉编译工具,汇报一下:用的是2.4.20内核,arm-linux-gcc3.4.1。
直到昨天晚上九点半,configure错误情况恢复到上个月底状态:checking eXosip2/eXosip.h usability nochecking .. presence noconfigure:error:couldn't find eXosip2 head!然后我添上了—with-osip=/work,这句话很无聊,因为我在找不到eXosip2 head之前已经checking osip的相关东西成功了,那就说明和osip相关的东西已经能够找到正确的路径链接了。
但是加上这句话确实有用,错误情况又变了:checking eXosip2/eXosip.h usability... yeschecking eXosip2/eXosip.h presence... yeschecking for eXosip2/eXosip.h... yeschecking for eXosip_subscribe_remove in -leXosip2... noconfigure: error: Could not find eXosip2 library with version >= 3.0.2 !据说是我的eXosip2 library版本太低,可是我用的明明就是3.2版本,有没有可能是系统里本来就有这个库,find一下,我几乎找了所有的主要路径都搜不到,除了自己编译的版本。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交叉编译几种常见的报错
由于是第一次交叉编译,不知道会出现什么问题,思路就是先把gcc和ld都改成arm的,然后遇到什么问题在解决什么问题,以下过程都是在这个思路下进行。
1.指定arm的编译器和连接器:
只是把gcc改为arm-none-linux-gnueabi-gcc,ld改为arm-none-linux-gnueabi-ld,其他的都没有
修改。
出现以下错误:
arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe for
cross-compilation
arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.so when searching
for -lfreetype
arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.a when searching
for -lfreetype
arm-none-linux-gnueabi-ld: cannot find -lfreetype
分析原因是:链接的这些库文件都是在PC编译器下编译出来的,现在把它们和用arm-none-linux-gnueabi-gcc编译出来的文件做链接,当然会出错。
解决方法:这些库重新用arm-gcc重新编译生成相应的库。
下面使用是重新编译库文件的过程:
重新编译freetype
根据交叉编译的文档,我创建了一个文件夹/usr/local/arm-linux来存放编译后的库文件。
执行:
./configure –host=arm-none-linux-gnueabi –prefix=/usr/local/arm-linux
注意:host的参数应该是交叉编译环境的前缀。
另外,freetype自动生成的include文件夹有点小问题,编译完成后的include目录结构是
/include/ft2build.h和
/include/freetype2/freetype/***.h如果直接使用会出现头文件找不到的问题,这里涉及到freetype 的一个小技巧:使用freetype时只需要包含ft2build.h这一个头文件即可,因为ft2build.h里面会自动包含其他需要的头文件。
而ft2build.h中的包含其他头文件的路径是/freetype/***.h,显然找不到相应的头文件。
我们把freetype2中的freetype文件整个拷贝到include目录下,然后把
freetype2删除即可。
原目录结构:
…/include/freetype2/freetype/***.h
…/include/ft2build.h
修改以后是:
…/include/freetype/***.h
…/include/ft2build.h
如果安装完成后直接就是后面这个目录结构就不用修改了。
或者在编译时直接使用-I再加一个头
文件的目录。
-I/…/include/freetype2
使用arm编译器和使用pc上的编译器编译过程差不多,需要注意的是我们需要重新指定路径以
免把原来的库文件覆盖掉。
2.在编译时出现这种错误:
解决上面的问题之后,再次编译,出现以下错误:
/usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/types.h:62: error:
conflicting types for ‘dev_t’
/usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:13: error:
previous declaration of ‘dev_t’ was here
开始以为是编译器自动寻找types.h文件然后自动包含进来了,后来所有的都头文件删除,然后每加一个头文件进来就编译看看是否出现错误,后来发现这个我的交叉编译器对于某些头文件的
使用顺序有要求。
例如:
#include <fcntl.h>
#include <linux/fb.h>
#include <linux/fb.h>
#include <fcntl.h>
第一种编译没有问题,第二种会出现上面的错误。
而这两种写法在PC的gcc上都没有错误。
我的交叉编译器版本:gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) 感觉这个问题是由于pc上的gcc和交叉编译使用的gcc的行为不同才导致的。
3.链接时这样的错误:
arm-none-linux-gnueabi-ld main.o es_run_file.o es_fbctl.o es_time.o es_sql.o es_fbio.o
es_dao.o es_utf8.o es_copy.o es_font.o -o main -L/usr/local/arm-linux/lib -lfreetype -lpthread
-lsqlite3 -lncurses
arm-none-linux-gnueabi-ld: warning: cannot find entry symbol _start; defaulting to 00009050
es_copy.o: In function `file_exist’:
/root/work/es_copy.c:32: undefined reference to `stat’
最后一个错误是找不到stat,我把es_copy.c文件单独拿出来修改以后编译:
arm-none-linux-gnueabi-gcc es_copy.c
没有错误。
把Makefile里的连接器也改成arm-none-linux-gnueabi-gcc,以上两个问题都消失了。
这个问题在gcc和arm-none-linux-gnueabi-gcc这两种编译器中都存在,应该链接时ld的参数
设置不对,具体怎样设置还是没有找到。
总结:交叉编译的一般过程
1.交叉编译并安装使用到的共享库。
2.交叉编译源程序。
3.调试。