LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3457|回复: 17

升级 gcc (问题已经解决,详见第 8 贴我的办法)

[复制链接]
发表于 2008-3-25 16:30:28 | 显示全部楼层 |阅读模式
lfs 6.2.5 的 gcc 版本是 4.0.3

我现在要用 openMP 和 fortran,发现 gcc 4.2 以上就有 openMP 的支持。
现在的问题是,我想安一个 gcc 4.3 (2008.3.6 realese) 请大家给点意见:
1,如果直接换掉原来的 gcc ,会不会对以后安装软件有什么影响?
2.如果单独安装到一个文件夹,是不是更好一些呢?(我本人倾向于这种结果,但是不知道有没有相关的办法实现)

欢迎各种意见和建议。
发表于 2008-3-25 17:32:24 | 显示全部楼层
你使用openMP时,必须需要gcc 4.2以上的版本。openmp是C语言的一个扩展,它的目的是支持并行程序设计,因此你不能把gcc 4.2作为一个工具来使用。必须让gcc活在matrix里,你也不能直接去覆盖原来的gcc,把高版本的gcc安装到一个文件夹内然后用gcc-config定位到新的gcc。

以上只是我的一点经验,上次我给GCC升级时因为gcc-config出错了找不到原因只好reinstall lfs。如果你成功了把经验发给大家
回复 支持 反对

使用道具 举报

发表于 2008-3-25 21:07:49 | 显示全部楼层
覆盖掉的优势:省硬盘空间,不用额外设定参数,避免一些不规范的Mafile带来的麻烦.
gcc如果安装在其他文件夹,可能要额外设置CC变量,但是有些Mafile不读取CC变量.
回复 支持 反对

使用道具 举报

发表于 2008-3-25 21:10:48 | 显示全部楼层
Post by kangtian;1830869
覆盖掉的优势:省硬盘空间,不用额外设定参数,避免一些不规范的Mafile带来的麻烦.
gcc如果安装在其他文件夹,可能要额外设置CC变量,但是有些Mafile不读取CC变量.


可以直接覆盖吗?能分享一下经验吗?我升级gcc还没有成功过
回复 支持 反对

使用道具 举报

发表于 2008-3-25 21:22:53 | 显示全部楼层
如果原来的gcc安装在/usr的话,编译新版gcc的时候--prefix=/usr就行了.我从4.1.2升级到4.2.3的时候就是这样做的.
多版本GCC共存在lfs中还是有些麻烦,freebsd中只要在/etc/make.conf中设定CC=/path/gcc,CXX=/path/g++就能换着用.
反正我是直接覆盖升级的,编译了几次内核和kde,也没出错.我还建议升级成功后,不要做检测,make bootstrap足够保证得到正确的结果.
我的参数是抄cblfs手册的:
../gcc-4.3.0/configure --prefix=/usr --libdir=/usr/lib \
   --libexecdir=/usr/lib --enable-shared --enable-threads=posix \
   --enable-__cxa_atexit --enable-c99 --enable-long-long \
   --enable-clocale=gnu --disable-libstdcxx-pch --disable-multilib \
   --enable-languages=c,c++
回复 支持 反对

使用道具 举报

发表于 2008-3-25 23:10:56 | 显示全部楼层
gcc 本身容许多版共存,而且不同版本之间存在差异,一时间不能完全兼容,所以最好是分别安装在不同的路径下

LFS 下没有 make.conf,以前我是在 configure 的前面写 CC=/path/gcc CXX=/path/g++ ./configure --..... 来指定 gcc 版本的

Debian 则全部安装在 /usr/bin,以不同的名字再利用 symlink 决定

我用更进取的方式,将 gcc 通通装到 /opt 的不同路径下再以 symlink 切换,十分方便
  1. root@BlackMesa:/opt# ll
  2. total 36
  3. lrwxrwxrwx  1 root root   21 Mar 19 14:19 gcc -> gcc-4.3.0-RC-20080222
  4. drwxrwxr-x  8 root root 4096 Feb 25 18:48 gcc-4.2.3
  5. drwxrwxr-x  8 root root 4096 Feb 23 15:30 gcc-4.3.0-RC-20080222
  6. drwxr-xr-x  7 root root 4096 Jun 28  2006 jre1.5.0_08
  7. lrwxrwxrwx  1 root root    9 Mar 24 14:07 kde -> kde-3.5.9
  8. drwxrwxr-x  6 root root 4096 Mar 24 15:23 kde-3.5.9
  9. lrwxrwxrwx  1 root root   11 Oct 16 15:18 lampp -> lampp-1.6.4
  10. drwxr-xr-x 20 root root 4096 Oct  7 17:07 lampp-1.6.4
  11. drwxr-xr-x 20 root root 4096 Aug 18  2006 lampp-154b3
  12. drwxr-xr-x  3 root root 4096 Feb 18 16:35 ooo-dev2.4
  13. lrwxrwxrwx  1 root root   17 Feb 18 16:48 openoffice -> openoffice.org2.4
  14. drwxr-xr-x  8 root root 4096 Feb 18 16:47 openoffice.org2.4
  15. lrwxrwxrwx  1 root root    8 May 23  2007 qt -> qt-3.3.8
  16. drwxrwxr-x 11 root root 4096 May 23  2007 qt-3.3.8
  17. root@BlackMesa:/opt# gcc --version
  18. gcc (GCC) 4.3.0 20080222 (prerelease)
  19. Copyright (C) 2007 Free Software Foundation, Inc.
  20. This is free software; see the source for copying conditions.  There is NO
  21. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  22. root@BlackMesa:/opt# rm gcc
  23. rm: remove symbolic link `gcc'? y
  24. root@BlackMesa:/opt# ln -s gcc-4.2.3 gcc
  25. root@BlackMesa:/opt# g++ -v
  26. Using built-in specs.
  27. Target: i686-pc-linux-gnu
  28. Configured with: ../gcc-4.2.3/configure --prefix=/opt/gcc-4.2.3 --libexecdir=/usr/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++
  29. Thread model: posix
  30. gcc version 4.2.3
  31. root@BlackMesa:/opt#
  32. root@BlackMesa:/opt# ll /usr/bin/gcc
  33. lrwxrwxrwx 1 root root 16 Jan 28 16:42 /usr/bin/gcc -> /opt/gcc/bin/gcc
  34. root@BlackMesa:/opt# ll /usr/bin/g++
  35. lrwxrwxrwx 1 root root 16 Jan 28 16:42 /usr/bin/g++ -> /opt/gcc/bin/g++
  36. root@BlackMesa:/opt#
复制代码
回复 支持 反对

使用道具 举报

发表于 2008-3-25 23:13:07 | 显示全部楼层
Post by xlreyur;1830871
可以直接覆盖吗?能分享一下经验吗?我升级gcc还没有成功过
可以的,看 BLFS 手册就行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-26 11:49:50 | 显示全部楼层
下载下来今年3月6日发布的 4.3 版,准备安装。
   发现,以前,作为可选项的 GMP 和 MPFR 成为必须的了,只好上网把它们也下载下来。
   先安 GMP, 按照 BLFS 的手册, ./configure --prefix=/usr --enable-cxx --enable-mpsd && make
   文档就不安了,check 也没做。直接再 make install
   再看 MPFR 的 INSTALL,说它依赖于 GMP.还说强烈建议安装补丁:
   wget http://www.mpfr.org/mpfr-2.3.0/patches
   patch -N -Z -p1 < patches
   再往下,没有特殊的说明,./configure --prefix=/usr (这个是 lfs 的习惯)
   还是不 check 不安文档, make && make install
   完事。
   sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in &&
   sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in &&
   mkdir ../gcc-build
   因为我要用 fortran, 所以
   ../gcc-4.3.0/configure --prefix=/usr --libdir=/usr/lib -libexecdir=/usr/lib --enable-shared --enable-threads=posix -enable-__cxa_atexit --enable-c99 --enable-long-long --enable-clocale=gnu --disable-libstdcxx-pch --disable-multilib --enable-languages=c,c++,fortran
   make bootstrap
   /usr/include/bits/mathinline.h: Assembler messages:
   /usr/include/bits/mathinline.h:6224: Error: symbol `fstat64' is already defined
   /usr/include/bits/mathinline.h:7040: Error: symbol `lstat64' is already defined
   /usr/include/bits/mathinline.h:7073: Error: symbol `stat64' is already defined

下面改这个源代码试一下
--------------------------------------------
我在怀疑是不是 fortran 的问题,于是 configure 时去掉最后的 fortran 支持,只编译 c,c++ 就通过了。
即:
../gcc-4.3.0/configure --prefix=/usr --libdir=/usr/lib -libexecdir=/usr/lib --enable-shared --enable-threads=posix -enable-__cxa_atexit --enable-c99 --enable-long-long --enable-clocale=gnu --disable-libstdcxx-pch --disable-multilib --enable-languages=c,c++
然后,
make bootstrap
ln -v -sf ../usr/bin/cpp /lib &&
ln -v -sf gcc /usr/bin/cc &&
chown -v -R root:root    /usr/lib/gcc/i686-pc-linux-gnu/4.3.0/include &&
chown -v -R root:root    /usr/lib/gcc/i686-pc-linux-gnu/4.3.0/ada{lib,include}

为什么加上 fortran 就不行呢?
以后用到了再研究,毕竟 linux 是拿来用的,不是用来折腾的。

还是谢谢楼上的各位。
回复 支持 反对

使用道具 举报

发表于 2008-3-26 22:05:07 | 显示全部楼层
我的 MPFR 及 GMP 是參考 CBLFS 的

http://cblfs.cross-lfs.org/index.php/MPFR

http://cblfs.cross-lfs.org/index.php/GMP

也许是版本较新吧,无需为 MPFR 打 patch

另,新版的 gcc 应该用 --enable-languages=c,c++,f95 来加入 Fortran 支持
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-27 12:49:01 | 显示全部楼层
谢谢 d00m3d 兄的关注

用 f95 之后,错误提示还是原来的样子。

而且 4.3.0 自己的安装说明里说:
Currently, you can use any of the following: all, ada, c, c++, fortran, java, objc, obj-c++, treelang.
应该不是 f95 的问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表