LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: ebill84

问个让人棘手的问题

[复制链接]
发表于 2007-10-17 19:21:42 | 显示全部楼层
Post by ebill84
我的gcc-3.4.3就是编译安装的,而现在要装的软件则只有rpm。
楼上说的参数指定是编译什么的时候参数指定?
当然是在 configure 的时候指定的了

楼主是怎样编译安装的,请说说过程
回复 支持 反对

使用道具 举报

发表于 2007-10-17 19:27:48 | 显示全部楼层
另,要运行的 rpm 包是什麽软件?是不要 g++ 的 libstdc++ 支持?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-17 20:41:17 | 显示全部楼层
其实我一直以来就是忽略依赖性安装的,但是软件似乎有些不稳定
这个软件是商业软件
/configure --prefix=/usr/local/gcc-3.4.3 --enable-languages=c,c++,java
我是如此编译的,试问如果如何指定仅让这个软件安装依赖于gcc-3.4.3,而系统中其他依赖于gcc-4.1.2的软件运行又不会受到影响
回复 支持 反对

使用道具 举报

发表于 2007-10-17 22:06:11 | 显示全部楼层
由於系统现在的主编译器是 gcc-4.1.2,应该默认装在 /usr/bin,为免冲突,次版本 gcc 可以装到其他地方,比如 /opt/gcc-3.4.3 或者像你现在的情况

要留意:
1. 源码编译 gcc 有几点要注意,特别是 gcc 的 developer 强烈建议另建工作目录来进行编译
2. 编译方法最好是參考 BLFS 手册

先把这几个包下回来:
http://ftp.osuosl.org/pub/lfs/lf ... 1/gcc-3.4.3.tar.bz2
http://ftp.osuosl.org/pub/lfs/lf ... .3-linkonce-1.patch
http://ftp.osuosl.org/pub/lfs/lf ... fixincludes-1.patch

然後解包:
tar xf gcc-3.4.3.tar.bz2

再执行下列命令:
cd gcc-3.4.3
patch -Np1 -i ../gcc-3.4.3-no_fixincludes-1.patch &&
patch -Np1 -i ../gcc-3.4.3-linkonce-1.patch &&
mkdir ../gcc-build &&
cd ../gcc-build &&
../gcc-3.4.3/configure --prefix=/opt/gcc-3.4.3 \
    --enable-shared \
    --enable-threads=posix --enable-__cxa_atexit \
        --enable-clocale=gnu --enable-languages=c,c++ &&
make bootstrap

此处目标安装位置是 /opt/gcc-3.4.3 下,languages 可自行加入 java 之类。make bootstrap 比较重要,因为它使编译後的 gcc-3.4.3 摆脱原系统里的 gcc-4.1.2 的影响,不过会花费较长的时间了

如无任何错误便可进行安装,以 root 身分执行:
make install

mv -v /opt/gcc-3.4.3/lib/[color="Red"]libstdc++.so.5* /usr/lib &&
ln -v -sf /usr/lib/[color="Red"]libstdc++.so.5.0.7 /opt/gcc-3.4.3/lib &&
ln -v -sf [color="Red"]libstdc++.so.5.0.7 /opt/gcc-3.4.3/lib/[color="Red"]libstdc++.so.5 &&
chown -v -R root:root \
    /opt/gcc-3.4.3/lib/gcc-lib/i686-pc-linux-gnu/3.4.3/include

注:
1. 这几个 libstdc++.so 的动态连结库的名字不太记得,可能叫 libstdc++.so.6*,请自行看看 /opt/gcc-3.4.3/lib/ 下哪些库的文件名
2. 以上是对 g++ 提供的 libstdc++ 库的支持,如果你的软件还要其他 gcc 的库,只要用相同方法把 /opt/gcc-3.4.3/lib/ 建立连结就能提供支持了

最後,如果想切换不同版本的 gcc 进行编译,可以用 symlink 来达到目的,以 root 身分执行:

cd /usr/bin
ln -sv gcc /usr/bin/cc
mv gcc gcc-4.1.2
ln -s gcc-4.1.2 gcc
mv g++ g++-4.1.2
ln -s g++-4.1.2 g++

如法去泡制 c++、cpp、gcov、gccbug 等,还有几个 i486-pc-linux-gnu 或者 i686-pc-linux-gnu 带头的 gcc/g++/c++ 等也同样建 symlink

cd /lib
ln -sf /usr/bin/cpp cpp

如是者系统的编译器仍是 gcc-4.1.2,如果想用 gcc-3.4.3,只要把相关连结指向 /opt/gcc-3.4.3/bin 里的执行文件便行

Hope this help!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-18 13:23:43 | 显示全部楼层
十分感谢!
下面这句什么意思?连接到这个文件夹吗?
ln -v -sf /usr/lib/libstdc++.so.5.0.7 /opt/gcc-3.4.3/lib &&
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-18 13:24:04 | 显示全部楼层
十分感谢!
下面这句什么意思?连接到这个文件夹吗?
ln -v -sf /usr/lib/libstdc++.so.5.0.7 /opt/gcc-3.4.3/lib &&
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-18 13:26:59 | 显示全部楼层
网络问题,重复发了
回复 支持 反对

使用道具 举报

发表于 2007-10-29 20:38:51 | 显示全部楼层
Post by ebill84
十分感谢!
下面这句什么意思?连接到这个文件夹吗?
ln -v -sf /usr/lib/libstdc++.so.5.0.7 /opt/gcc-3.4.3/lib &&
非也,意思是在 /opt/gcc-3.4.3/lib 下建立 libstdc++.so.5.0.7 的连结,即是 /opt/gcc-3.4.3/lib/libstdc++.so.5.0.7 -> /usr/lib/libstdc++.so.5.0.7 也
回复 支持 反对

使用道具 举报

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

本版积分规则

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