GNU Mirror List
查看动态库版本
strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'
查找gcc生成的最新动态库
find / -name "libstdc++.so*"
#默认4.8.5
g++ -v 或者 gcc --version
wget https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz
tar -xvf gcc-10.2.0.tar.xz
cd gcc-10.2.0
./contrib/download_prerequisites
## 编译常用软件包
yum install -y gcc-c++ libstdc++-static ant cmake byacc flex automake libtool binutils-devel bison ncurses-devel gcc kernel-devel libtool libatomic libcurl-devel texinfo
./configure --prefix=/usr/local/gcc-10.2.0 --enable-bootstrap --enable-languages=c,c++ --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib
make -j4
make install
查看libstdc++.so
find / -name "libstdc++.so*"
进入libstdc++.so配置目录
cd /usr/lib64
#备份
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
mv /usr/lib64/libstdc++.so /usr/lib64/libstdc++.so.bak
mv /usr/bin/gcc /usr/bin/gcc485
mv /usr/bin/g++ /usr/bin/g++485
mv /usr/bin/c++ /usr/bin/c++485
mv /usr/bin/cc /usr/bin/cc485
#创建新软连
ln -s /usr/local/gcc-10.2.0/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-10.2.0/bin/g++ /usr/bin/g++
ln -s /usr/local/gcc-10.2.0/bin/c++ /usr/bin/c++
ln -s /usr/local/gcc-10.2.0/bin/gcc /usr/bin/cc
ln -s /usr/local/gcc-10.2.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
ln -s /usr/local/gcc-10.2.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so
# 验证
gcc --version
https://mirrors.aliyun.com/centos-vault/7.5.1804/sclo/x86_64/rh/
https://mirrors.aliyun.com/centos/7.9.2009/sclo/x86_64/rh/Packages/d/
CentOS 7官方源的gcc最新版本是4.8.5,发布于2015年,年代久远且不支持c++14。要编译c++14及以上项目,必须要升级现有版本或者安装高版本的gcc。红帽其实已经编译好了高版本的gcc,但未更新到base和epel这两个常用源中,而是将这些版本放在scl中。
##列出GCC版本
yum list |grep devtoolset |grep gcc.x86_64
sudo yum install centos-release-scl
注意,如果想安装7.版本的,就改成devtoolset-7,以此类推
sudo yum install devtoolset-8*
所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
# 官方推荐的加载命令
scl enable devtoolset-8 bash
# 第2种 执行安装软件自带的脚本,可以写入启动脚本中
source /opt/rh/devtoolset-x/enable #x为要启用的版本。
gcc -v
这条激活命令只对本次会话有效,重启会话后还是会变回原来的4.8.5版本,要想随意切换可按如下操作
首先,安装的devtoolset是在 /opt/rh
目录下的,
每个版本的目录下面都有个 enable 文件,如果需要启用某个版本,只需要执行
source ./enable
旧的gcc是运行的/usr/bin/gcc
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
gcc --version
g++ --version
下载镜像
wget https://ftp.gnu.org/gnu/gdb/gdb-8.3.1.tar.gz
cd gdb-8.3.1/
./configure
make -j4
make install
建议在安装gcc前,先装gdb的升级,gdb的升级不能用太高版本的gcc编绎,或者在编绎时指定低版本的gcc。
CC=/usr/local/gcc/bin/gcc ./configure
install
wget https://cmake.org/files/v3.16/cmake-3.16.9.tar.gz
tar xvzf cmake-3.16.9.tar.gz
cd cmake-3.16.9/
./bootstrap --prefix=/usr/local/cmake
make -j4
# 卸载旧版本
yum remove cmake -y
make install
vi /etc/profile
#增加一行:
export PATH=$PATH:/usr/local/cmake/bin
gcc/g++ 头文件和库文件搜索路径
GNU Make官网
DOC
GNU Make是一个工具,它可以控制从程序的源文件生成可执行文件和其他非源文件。
输出帮助信息.即使是有经验的用户也偶尔需要使用使用’–help’选项,因为一个复杂的项目会包含附加的选项.例如,GCC包里的’configure’脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项.
这里是最终生成可执行文件的安装目录也就是exe的存放目录。可以根据自己的需要调整。
libstdc++
是 GCC对 C++ Standard Library 的实现。
libc++
是 clang
的实现。
libsupc++
是libstdc++
的子集,可以在github找到libsupc++,它是libstdc++的一个子文件夹:
libsupc++
包含C++最核心的一部分功能,比如:
内存分配:operator new, operator delete等
异常处理
run-time type information (RTTI):dynamic_cast,typeinfo类等
初始化列表:定义了template initializer_list
…
xgcc: fatal error: cannot execute ‘cc1plus’: execvp: No such file or directory
g++ --version
gcc --version
没有版本号的话下载
有的话
运行:
find / -name "cc1plus"
添加到环境变量:
export PATH="$PATH:/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/"
/usr/include/gnu/stubs.h:7:11: fatal error: gnu/stubs-32.h: No such file or directory
64位linux 提示这个问题
这个问题是由于缺少32位兼容包,解决办法:
Ubuntu:sudo apt-get install libc6-dev-i386
CentOS:yum -y install glibc-devel.i686
是因为 gcc 没有装
还有一种情况就是软链接被移除,
重新建立软链接
ln -s gcc cc
libclang
错误错误:thread ‘main’ panicked at 'Unable to find libclang: "the libclang shared library at /usr/lib64/clang-private/libclang.so.7 could not be opened
解决:
$ rpm -qa | grep "llvm-private"
$ rpm -e --nodeps llvm-private-7.0.1-1.el7.x86_64
$ yum install -y clang llvm
错误:thread ‘main’ panicked at 'libclang function not loaded: clang_getTranslationUnitTargetInfo. This crate requires that libclang 3.9 or later be installed on your system, clang版本过低了,centos 7默认是3.4
解决:
$ yum install llvm-toolset-7
$ scl enable llvm-toolset-7 bash #激活clang并检查版本,clang相关依赖已经全部安装了
深入理解 LLVM架构