【系统软件02】源码离线安装gcc
- 一、下载、编译、安装
- 二、设置环境变量
- 三、设置头文件
- 四、重新加载动态链接库
- 五、cmake使用的是旧版gcc?
- 六、libstdc++.so.6:version'GLIBCXX_3.4.21'not find
- 七、libjvm.so找不到,需要在ld.so.conf.d中增加java库的路径
- 八、GCC相关
- 1、GCC常用选项
- 2、GCC的扩展功能
- 3、GCC的调试工具
- 4、学习资源推荐
一、下载、编译、安装
- 下载 gcc-4.9.0.tar.bz2
wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
- 解压
tar -zxvf gcc-9.3.0.tar.gz
- 进入gcc-4.9.0目录
cd gcc-4.9.0
- 下载所需
./contrib/download_prerequisites
可以看到一共下载了这四个所需的软件gmp-6.1.0.tar.bz2、mpfr-3.1.4.tar.bz2、mpc-1.0.3.tar.gz、isl-0.18.tar.bz2。
[root@localhost gcc-9.3.0]# ./contrib/download_prerequisites
2023-06-26 20:03:47 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2023-06-26 20:05:30 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2023-06-26 20:06:18 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2023-06-26 20:08:20 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.
[root@localhost gcc-9.3.0]#
- 创建build目录、进入build目录
mkdir build && cd build
- configure
../configure --prefix=/usr/local/gcc-9.3.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
- 编译、安装
make -j16 && sudo -j16 make install
管理员权限安装
二、设置环境变量
[dev1@localhost ~]$ sudo vi /etc/profile.d/gcc.sh
export PATH=/usr/local/gcc/bin:$PATH
[dev1@localhost ~]$ source /etc/profile.d/gcc.sh
三、设置头文件
sudo ln -sv /usr/local/gcc-9.3.0/include/ /usr/include/gcc
四、重新加载动态链接库
- 增加动态链接库路径
touch /etc/ld.so.conf.d/gcc.conf
sudo chmod 777 /etc/ld.so.conf.d/gcc.conf
sudo echo -e "/usr/local/gcc-9.3.0/lib64">>/etc/ld.so.conf.d/gcc.conf
- 重新加载动态链接库
sudo ldconfig -v
ldconfig -p |grep gcc
五、cmake使用的是旧版gcc?
这时系统使用的是系统自带的旧版本的gcc,解决方案如下
- 把系统自带的备份
cd usr/bin
mv gcc gcc.bak
mv g++ g++.bak
mv c++ c++.bak
mv cc cc.bak
mv cpp cpp.bak
mv gcc-nm gcc-nm.bak
mv gcc-ar gcc-ar.bak
mv gcc-ranlib gcc-ranlib.bak
- 建立软链接gcc、g++、c++
ln -sv /usr/local/gcc-9.3.0/bin/gcc /usr/bin/gcc
ln -sv /usr/local/gcc-9.3.0/bin/g++ /usr/bin/g++
ln -sv /usr/local/gcc-9.3.0/bin/c++ /usr/bin/c++
ln -sv /usr/local/gcc-9.3.0/bin/cc /usr/bin/cc
ln -sv /usr/local/gcc-9.3.0/bin/cpp /usr/bin/cpp
ln -sv /usr/local/gcc-9.3.0/bin/gcc-nm /usr/bin/gcc-nm
ln -sv /usr/local/gcc-9.3.0/bin/gcc-ar /usr/bin/gcc-ar
ln -sv /usr/local/gcc-9.3.0/bin/gcc-ranlib/usr/bin/gcc-ranlib
六、libstdc++.so.6:version’GLIBCXX_3.4.21’not find
把原来的备份,重新生成软连接。
cd /usr/lib64/
mv libstdc++.so.6 libstdc++.so.6.bak
ln -sv /usr/local/gcc-9.3.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
七、libjvm.so找不到,需要在ld.so.conf.d中增加java库的路径
解决方案:同《 四、重新加载动态链接库》,把所在库的路径加入到ld.so.conf.d
八、GCC相关
1、GCC常用选项
- 调试选项
- -g:生成调试信息。
- -Og:仅进行基本优化,同时保留较好的调试能力。
- 优化选项
- -O0:不进行优化。
- -O1:进行基本优化。
- -O2:进行更多优化。
- -O3:进行更高级的优化。
- 其他常用选项
- -Wall:启用警告信息。
- -std=c11:使用C11标准。
- -std=c++17:使用C++17标准。
2、GCC的扩展功能
- 静态库和动态库
- gcc -c:编译源文件生成目标文件。
- gcc -shared:生成动态库。
- gcc -static:生成静态库。
- 多文件编译
- gcc file1.c file2.c -o output:将多个源文件编译为一个可执行文件。
- 调用外部库
gcc main.c -lm:调用数学库。
3、GCC的调试工具
- GDB(GNU Debugger):用于调试程序,提供断点调试、变量查看等功能。
4、学习资源推荐
- GCC官方文档:https://gcc.gnu.org/onlinedocs/
- GNU Make教程:http://www.ruanyifeng.com/blog/2015/02/make.html
参考
黑猴子的家:Centos 7.x gcc 4.8.5 升级到 gcc 4.9.4
源码安装GCC-4.9.2