通过deb包安装老版本的GCC

        之前讲过通过源码编译早期版GCC,最近发现一个通过deb安装早期版本GCC的方法,相对来说安装的成功率更高一点。
        操作系统是Ubuntu 16.04(64位) ,安装的是GCC 3.4(包括gcc和g++)。我们需要如下5个安装包:

  • gcc-3.4-base_3.4.6-6ubuntu5_amd64.deb
  • cpp-3.4_3.4.6-6ubuntu5_amd64.deb
  • gcc-3.4_3.4.6-6ubuntu5_amd64.deb
  • libstdc++6-dev_3.4.6-6ubuntu5_amd64.deb
  • g++-3.4_3.4.6-6ubuntu5_amd64.deb

需要的deb包可以在 http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/ 找到。
        下载完安装包之后,就用sudo dpkg -i *deb一次性安装,无需考虑依赖关系。安装完之后我们可以用

  • ls -l /usr/bin/gcc*
  • ls -l /usr/bin/g++*

来查看安装好的程序。这时候我们还不能直接使用,因为我们看到gcc和g++的符号链接还指向原来的程序。
        比较粗暴的方式是直接修改原来的符号链接,但更为优雅的方式是使用update-alternatives命令。使用方法很简单,掌握如下3条命令的用法就够了(下面直接给出例子):

  • sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 40:创建链接,后面四个参数分别是:链接名称、程序名称、指向的真实路径和优先级
  • sudo update-alternatives --remove gcc /usr/bin/gcc-3.4
  • sudo update-alternatives --config gcc

用这几条命令,把两个版本的gcc和两个版本的g++合理的组织起来,以后就可以更方便的切换了。
        接下来就编译一个小程序检验一下效果。很不幸的是,用gcc编译时出现了问题。

  • 其中一类是这样的/usr/bin/ld: cannot find crt1.o
    • 解决方法是先用find /usr/lib/ -name crt1.o找到其在系统中的位置,然后建立符号链接ln -s /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/crt1.o
  • 还有一个是这样的/usr/bin/ld: cannot find -lgcc_s
    • 解决方法是用locate libgcc_s.so.1找到实际位置,然后建立链接ln -sf /lib/x86_64-linux-gnu/libgcc_s.so.1 /usr/lib/gcc/x86_64-linux-gnu/3.4.6/libgcc_s.so。这里用-f 参数是因为后面那个链接已经存在了,但我们可以用命令ls -l看到原来的链接已经损坏了。

解决了这些问题,就可以正常使用了。


猜你喜欢

转载自blog.csdn.net/u011008379/article/details/80343269