2012年1月31日星期二

kubuntu11.10下安装gcc-3.4

最近答应帮忙实现88的一些功能,放假前把系统重装了一下,以前用的是ubuntu10.04,现在尝试用一用kubuntu11.10,界面感觉舒服多了,不过问题又出现了。
之前的系统,测试站已经搭好了,现在要重新搭建。安装说明中推荐用gcc-3.4,否则可能遇到不可知的错误。现在的系统默认安装的是gcc-4.6,先试着编译了一下,确实出现不明情况的错误。于是将gcc-3.4的源加入源列表,
sudo apt-get install gcc-3.4
sudo apt-get install g++-3.4
sudo ln -s gcc-3.4 gcc
sudo ln -s g++-3.4 g++
但编译运行helloworld.c时,报错
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
于是将其卸载,手动安装如下.deb包
gcc-3.4-base_3.4.6-6ubuntu3_amd64.deb
gcc-3.4_3.4.6-6ubuntu3_amd64.deb
cpp-3.4_3.4.6-6ubuntu3_amd64.deb
g++-3.4_3.4.6-6ubuntu3_amd64.deb
libstdc++6-dev-3.4.6-6ubuntu3_amd64.deb
仍然是相同的错误,反复折腾了近两天,对于菜鸟的我来说,近乎放弃,决定换回10.04,因为之前安装的时候是没有问题的。但是已经用了这么长时间来解决这个问题,就这样放弃实在是憋屈,而且遇到问题是要找出原因,解决它,而不是绕开。还好,最终安装成功。
1.  报错: /usr/bin/ld: cannot find -lgcc_s
 是指系统找不到需要链接的库文件,该库文件为libgcc_s.so。libgcc_s.so是一个链接文件,链接到对应目录的libgcc_s.so.1文件。打开libgcc_s.so弹出提示链接已损坏。于是一切豁然开朗:文件未能链接到正常的库文件。接下来在终端下输入:
 locate libgcc_s.so.1
 于是重定向3.4版编译的的libgcc_s.so链接
ln -sf /lib/x86_64-linux-gnu/libgcc_s.so.1 /usr/lib/gcc/x86_64-linux-gnu/3.4.6/libgcc_s.so
2. 报错: /usr/bin/ld: cannot find crt1.o: No such file or directory
                /usr/bin/ld: cannot find crti.o: No such file or directory
系统里现已安装的gcc有3.4和4.6两个版本,
ln -s gcc-4.6 gcc
ln -s g++-4.6 g++
利用 -print-file-name选项来确定gcc能否找到文件crt1.o, crti.o
当gcc的版本是4.6时,输入
gcc -print-file-name=crt1.o
输出
/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu/crt1.o
当gcc版本为3.4时,
输出为
crt1.o
也就是说,gcc-3.4找不到文件crt1.o
locate crt1.o
发现文件crt1.o在目录/usr/lib下,于是
cd /usr/lib
ln -s x86_64-linux-gnu/crt*.o .  
再编译helloworld.c
编译成功。终于解决了,赶紧接下来的工作。

没有评论:

发表评论