前两天重做Linux 20题,安装samtools软件,./configure
时出现报错:
no acceptable C compiler found in $PATH
自作主张的的安装了gcc编译器,
$apt-get install gcc
然后就成功的掉坑里了。
再次./configure
,继续报错,查看config.log
后,发现错误代码如下:
/usr/bin/ld: cannot find crt1.o
类似于这样子的报错。
(ps.因为我已经从坑里爬出来,成功安装samtools,报错的config.log没有保存,已经被成功的版本替换掉了,但是错误代码还是记得的)
我又找到了一份别人的报错,我的报错跟他应该是一样的。
https://stackoverflow.com/questions/7934642/cross-compile-cannot-find-crt1-o
/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: ld returned 1 exit statusshell
问题出在gcc上,为了找到解决方案,疯狂搜索4小时无果,当时搜索的关键词是/usr/bin/ld: cannot find crt1.o
网上的方法用了个遍,win内置Linux系统被我重置了4次以上。
错误尝试:
- 删除gcc,当时用apt命令把所有的gcc软件全部找出来,一一删除,结果把Linux自带的
gcc-8-base
删除了,所有的Linux命令全部失效,包括ls
,第一次尝试以重置Linux告终。 - 网上关于
/usr/bin/ld: cannot find crt1.o
的答案,解决方案一是查找crt1.o的正确位置,然后链接过去,于是找crt1*
文件,
$find /usr/ -name crt1*
结果是找不到crt1*
文件,尝试失败; - 网上关于
/usr/bin/ld: cannot find crt1.o
的答案,解决方案二( https://blog.csdn.net/zgl07/article/details/68942052 )说是./configure
编译32位/64位的问题,默认编译32位,而机器是64位的,所以要告诉编译器要编译64位,需要加参数--build=x86_64-linux
,尝试,依旧失败。 - 网上关于
/usr/bin/ld: cannot find crt1.o
的答案,解决方案二是安装各种各样的库文件,比如libc6-dev
,glibc
,multilib
等包,sudo apt-get install
后,各种安装不上,继续搜索发现有人推荐aptitude
命令安装库文件会方便很多,于是下载安装aptitude
,结果安装时,它把我的apt
命令给删掉了,结果使用aptitude
根本就没办法下载任何东西,而且想重新安装回apt
都报错,再次重置Linux。
今天再次重置win内置Linux系统后,干净的内置Linux是没有C编译器的(ps. 我也不知道gcc-8-base
算是什么玩意儿,反正./configure
时报错是缺C编译器嘛),重新搜索,关键词改为no acceptable C compiler found in $PATH
然后就发现了 https://blog.csdn.net/tengxing007/article/details/80062074 这篇帖子,解决方案是安装build-essential
:
$apt-get install build-essential
运行了以后,./configure
终于回到库文件没装的老问题上来了,按照缺什么装什么的原则,终于configrue
通过,make
,make install
,装好了samtools 。
记录一下samtools需要的库文件:
$sudo apt-get install libncurses5-dev
$sudo apt-get install zlib1g-dev
$sudo apt-get install libbz2-dev
$sudo apt-get install liblzma-dev
总结:
- 乖乖用google搜索;
- 死钻牛角尖是没有好下场的,回溯到问题的上一步debug也许会有意想不到的结果;
- 下次可以好好研究一下gcc
以上です