最近在嵌入式系统上装jpeg的库,下载了jpegsrc.v8b.tar.gz,解压后./configure,此时我配置的是--host=arm-none-linux-gnueabi,结果出现报错,
看着很无语,因为这个错误之前在做tslib检测触摸屏时就碰到过,只是当时又去忙找工作的事就不了了之了,果然欠下的债还是要还的。这个里面报错是说C编译器没有工作,可是交叉编译工具链(其实是交叉编译器)是安装好了的(我就是用的这个编译的内核和u-boot及触摸屏的驱动)。根据提示查看config.log,有如下信息:
其实根据arm-none-linux-gnueabi-gcc:no input file已经可以知道交叉编译器是能工作的,之前我没有解决这个问题是因为根据前面的信息一直以为是版本的问题,也根据网上的一些教程下载安装glibc,但是都无济于事。这次我就根据后面的报错信息cannot find crt1.o谷歌加百度,有一篇文章说是解决这个问题的,但是是单一的配置sysroot,这样的话每次都要配置不说,对于没有这个配置选项的程序就呵呵了,(由于我的知识面有限,所以不知道对不对,但是在jpeg库的配置里面我没有找到sysroot的配置选项)在谷歌的一些搜索结果中大概了解到是自己的交叉编译工具链不完整,缺少一些库文件。(不能看到报错说找不到库文件就觉得是自己没有那些文件,还有可能是对文件的权限不够,比如说在虚拟机下如果以root的身份传的库文件,非root用户(比如我的zxs)就算是sudo了也会报错说找不到库文件)有的也给了几种方法。比如说下载安装一个做好的库,也可以自己build,
http://comments.gmane.org/gmane.comp.gcc.help/46114
这个网页上提到用linaro的做好的完整的交叉编译工具链,当然这是我的首选,不是因为懒,而是我的嵌入式系统用的根文件系统就是linaro的,而且之前也在全志的文档上见过linaro的交叉编译工具链。于是在全志官网
http://linux-sunxi.org/Toolchain
找到
有这个自然是最好的,不过亲们不用试了,一个收费一个过期,之后再看这个
下载了4.7版本结果不会用,我下载的没有他所说的解压后有bin文件的,不知道是我打开方式不对还是说这个工具链还需要build神马的。之后便直接在the main selection page is here上下载了一个最新的交叉编译工具链。之后用着问题解决,
(对比arm-none-linux-gnueabi和armeb-linux-gnueabihf可以发现后者包含crt1.o)其实就是找一个pre-built cross toolchains。问题还没有这么简单,这个过程中也对交叉编译工具链有了更深入的理解,这个工具链以后很可能可能还会出问题,
http://blog.163.com/linan_6688_cool/blog/static/111774958200932963248316/
还是要学习分步编译和安装交叉编译工具链所需要的库和源码(估计之前的那个4.7版本属于这类)真正的去掌握搭建交叉编译环境。
之前从来没有想过是交叉编译工具链的问题,安装的时候很容易,毕竟用前辈用过的所以从未怀疑过,感觉嵌入式底层的环境还是很复杂的,没有一个清晰的认识之前或者是自己的面不够广之前真的会走很多弯路,有很多东西意想不到。网上很多博文教程拿到你这里来可能就不适用了,我觉得不是说那篇文章有问题,原因可能很多,譬如说写这些的人比较熟悉会忽略自己配置过的细节,运行环境不同,软件更新等等等等。总之在熟悉之前总是会出各种千奇百怪的问题(有人手把手带是另一说了),我之前根据官网上的自己去做也出现过根文件系统过时,命令不适用等等情况,(软件更新太快但是官网跟新很慢,就像全志的官网上也会提示说有的链接可能已经过期了)这些很基本的东西都会耗费时间,我觉得主要还是耐心点,学会多变通。第一篇博文多罗嗦了几句,不敢对某一专门的问题做深入的探讨,也不知道上面的这些有多少观点是错的。希望觉得有错误的朋友可以提出来一起探讨
最近在CentOS7的64位机器上,通过编译源代码安装gcc8.3.0时遇到一个问题如下;
/usr/bin/ld: cannot find
crt1
.o: No such
file
or
directory
/usr/bin/ld: cannot find crti.o: No such
file
or
directory
看了好多网上的
解决
方案:有的是把crtl1.o的路径加入PATH,有...
err: /usr/bin/ld: cannot find
crt1
.o: No such
file
or
directory
/usr/bin/ld: cannot find crti.o: No such
file
or
directory
/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find crtn.o: No such
file
or
directory
collect2: error: ld returned 1 exit status
其实之前已经编译很多次gcc,都没有问题但是这次在64位Ubuntu虚拟机里面编译遇到了一些问题。
简单记录一下。
config的log里面报错是cannot find
crt1
.o
这个直接想到是路径不对,找不到,但是做了符号链接还是找不到。
后来发现有这么一句话
checking ABI=32
这意味着这样配置编译出来的二进制ELF一定都是32位的,怪不得这时候后来报的说
cp -pR -f phar.phar /usr/local/php7/bin/phar
cp: cannot stat 'phar.phar': No such
file
or
directory
make: *** [install-pharcmd] Error 1
解决
方法
很简单:
find . -name 'phar.phar'
找到 phar.phar 文件, 移动或者复制到安装指令执行的目录下就行了.
最后附上, 完成后的执行指令:
以上就是这篇文章的全
问题是,可能只有当前架构的gcc,而且是64位的。所以需要32位的支持文件。
对于 cannot find
crt1
.o
sudo apt install gcc-multilib
对于 cannot find lgcc_s
sudo apt-get install lib32z1-dev
/usr/bin/ld: cannot find
crt1
.o: No such
file
or
directory
/usr/bin/ld: cannot find crti.o: No such
file
or
directory
回答: 出现"/usr/bin/ld: cannot find
crt1
.o: No such
file
or
directory
/usr/bin/ld: cannot find crti.o: No such
file
or
directory
"的错误通常是由于缺少必要的系统库文件引起的。这些库文件是编译器链接程序所需的文件。
解决
这个问题的
方法
是安装缺失的库文件。你可以尝试使用以下命令来安装缺失的库文件:
sudo apt-get install libc6-dev
sudo apt-get install gcc
这些命令将会安装所需的库文件,以便编译器能够找到并链接它们。希望这能帮助你
解决
问题。[1][2][3]