在编译底层supernova时报错:
xxxxx$ make image_all
.....
generate executable fail:
/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/4.8/libstdc++.so 时跳过不兼容的 -lstdc++
/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/4.8/libstdc++.a 时跳过不兼容的 -lstdc++
/usr/bin/ld: 找不到 -lstdc++
collect2: error: ld returned 1 exit status
问题原因:
该问题一般是由于ld在进行库的连接时找不到库文件所致.
解决方案:
出现该问题时,去lib目录下查找相关的库文件,基本如下:
1.查看本机/usr下的存放lib的目录有:lib lib32 libx32
$ cd /usr
$ ls
bin games include lib lib32 libx32 local sbin share src
2.分别去lib lib32 libx32目录下查找相应的libxxx
本机lib libx32下都没有相关库文件,在lib32下有但没有libstdc++.so的链接;
$ cd /usr/lib32/
$ ll | grep libstdc++
lrwxrwxrwx 1 root root 19 2月 14 2018 libstdc++.so.6 -> libstdc++.so.6.0.19
-rw-r--r-- 1 root root 922096 2月 14 2018 libstdc++.so.6.0.19
上述库文件中没有库的入口: libstdc++.so
3.可以通过手动建立连接来解决
$ sudo ln -s ./libstdc++.so.6 ./libstdc++.so
$ ll | grep libstdc++
lrwxrwxrwx 1 root root 16 9月 20 16:33 libstdc++.so -> ./libstdc++.so.6
lrwxrwxrwx 1 root root 19 2月 14 2018 libstdc++.so.6 -> libstdc++.so.6.0.19
-rw-r--r-- 1 root root 922096 2月 14 2018 libstdc++.so.6.0.19
再重新编译没问题了。
网上看到其它的解决方案,但在我的Ubuntu机器上不奏效,这里只是贴出来,供参考。
该问题应该是该库的头文件库没有安装所致:
[root@localhost lib]# yum list all | grep ltdl
libtool-ltdl.i386 1.5.22-7.el5_4 installed
libtool-ltdl-devel.i386 1.5.22-7.el5_4 CentOs5.5-32
安装头文件:
[root@localhost lib]# yum -y install libtool-ltdl-devel.i386
。。。
查看后发现该错误确实是由devel头文件未安装所致。
[root@localhost lib]# rpm -ql libtool-ltdl-devel.i386
/usr/include/ltdl.h
/usr/lib/libltdl.a
/usr/lib/libltdl.la
/usr/lib/libltdl.so
OK.问题解决~