CentOS 7 升级最新版本git

本文介绍如何在CentOS系统上从源码编译安装最新版本的Git,并解决了在编译过程中遇到的关于libiconv的链接错误。

准备工作:

CentOS 上的最新git版本也只有1.8.3,就想试着装上最新的版本,没想到差点玩脱,全当记录一次冒险经历

  • Development tools 没装的要装上,不然GCC编译时会出错
# yum -y groupinstall Development tools
  • GCC 用于编译安装包
# yum install gcc perl-ExtUtils-MakeMaker
  • 再卸载CentOS自带的老版本git
# yum -y remove git

下载git并安装

# cd /usr/src
# wget https://www.kernel.org/pub/software/scm/git/git-2.12.0.tar.gz
# tar xzf git-2.12.0.tar.gz
安装注意事项:
# cd git-2.12.0
# make prefix=/usr/local/git all

此时报错

/usr/src/git-2.12.0/utf8.c:463:对‘libiconv’未定义的引用
libgit.a(utf8.o):在函数‘reencode_string_len’中:
/usr/src/git-2.12.0/utf8.c:524:对‘libiconv_open’未定义的引用
/usr/src/git-2.12.0/utf8.c:535:对‘libiconv_close’未定义的引用
/usr/src/git-2.12.0/utf8.c:529:对‘libiconv_open’未定义的引用
collect2: 错误:ld 返回 1
make: *** [git-credential-store] 错误 1

原方案:

# make prefix=/usr/local/git all
# make prefix=/usr/local/git install

解决方案:

可替换为

# ./configure --without-iconv
# make CFLAGS=-liconv prefix=/usr/local/git all
# make CFLAGS=-liconv prefix=/usr/local/git install

最后将git加入环境变量

# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
# source /etc/bashrc

大功告成!查看一下git的版本

# git --version
>> git version 2.12.0
<think>好的,我现在需要帮助用户解决在CentOS 7上把GCC升级版本9,以解决AWS SDK for C++编译的问题。首先,用户之前提到了编译时遇到的错误,特别是关于UserAgentInterceptor移动构造函数的异常规范问题。根据之前的回答,这个问题可能与旧版GCC不支持noexcept有关,所以升级GCC是合理的解决方案。 接下来,我需要参考用户提供的引用内容。用户给出的引用1到4涉及编译AWS SDK的不同步骤,比如设置C++11标准、CMake配置、安装依赖库等。但用户当前的问题集中在升级GCC上,因此可能需要结合这些引用中的步骤,尤其是关于编译AWS SDK时的CMake参数和依赖安装。 用户现在的问题是CentOS 7升级GCC到9,并解决AWS SDK编译问题。CentOS 7默认的GCC版本是4.8.5,这确实太旧了,不支持C++11之后的很多特性,比如noexcept的正确处理。所以升级到GCC 9是必要的步骤。 我需要先考虑如何在CentOS 7上安全地升级GCC到9。通常有两种方法:使用SCL(Software Collections)或者从源码编译。SCL方法可能更简单,因为它允许用户启用较新版本的GCC而不影响系统默认版本,这对于系统稳定性很重要,特别是生产环境中。但用户可能需要确保所有编译命令都使用新版本的GCC,比如通过scl enable来启动shell环境,或者直接设置环境变量。 然后,安装完GCC 9后,用户需要重新配置和编译AWS SDK,这时候可能需要调整CMake参数,比如设置C++标准为14或更高,指定OPENSSL的路径,以及其他相关依赖库的位置。用户提供的引用3中提到安装openssl和设置OPENSSL_ROOT_DIR,这可能也是关键,因为AWS SDK依赖openssl。 此外,用户可能在升级GCC后遇到链接库的问题,比如标准库路径是否正确,是否安装了必要的开发包如libcurl-devel、zlib-devel等,这些在之前的引用3中也有提到,需要确保这些依赖项已经正确安装。 还要注意,用户之前的错误是关于移动构造函数中的noexcept,所以升级GCC后应该能解决这个问题,但可能需要重新编译所有依赖项,确保它们也是用新GCC编译的,以避免ABI不兼容的问题。 最后,需要指导用户验证GCC版本是否正确,并重新运行CMake和make命令,确保编译过程使用新的GCC版本和相关依赖库。可能还需要设置LD_LIBRARY_PATH来指向新的库路径,如引用1中提到的导出LD_LIBRARY_PATH。 总结步骤应该是:升级GCC到9,安装必要依赖,配置CMake时指定正确的参数,重新编译AWS SDK,并处理可能出现的环境变量问题。需要将这些步骤详细但清晰地呈现给用户,确保他们能逐步操作,避免遗漏关键点。</think>以下是在CentOS 7上通过升级GCC 9解决AWS SDK for C++编译问题的系统化方案: --- ### 一、GCC 9升级方法(两种途径) #### **方法1:使用SCL(推荐)** ```bash # 安装SCL工具和GCC 9工具链 sudo yum install centos-release-scl sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ # 临时启用GCC 9(仅当前会话有效) scl enable devtoolset-9 bash # 永久生效(写入环境变量) echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc source ~/.bashrc ``` #### **方法2:源码编译安装** ```bash # 安装依赖 sudo yum install -y wget make gmp-devel mpfr-devel libmpc-devel # 下载GCC 9源码 wget https://ftp.gnu.org/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.gz tar xvf gcc-9.5.0.tar.gz cd gcc-9.5.0 # 配置并编译(需2小时以上) ./contrib/download_prerequisites mkdir build && cd build ../configure --enable-languages=c,c++ --disable-multilib make -j$(nproc) sudo make install # 更新动态库链接 sudo ldconfig ``` --- ### 二、验证GCC版本 ```bash gcc --version # 应显示9.x.x g++ --version # 应显示9.x.x ``` --- ### 三、AWS SDK编译关键配置调整 #### 1. **修复`UserAgentInterceptor`移动构造函数错误** 升级GCC 9后,该错误通常自动解决(因支持C++14标准及`noexcept`规范)[^1]。若仍存在,可添加编译选项: ```bash export CXXFLAGS="-Wno-error=attributes" # 参考用户提供的引用[3] ``` #### 2. **CMake配置示例** ```bash mkdir build && cd build # 关键参数说明: # -DCMAKE_CXX_STANDARD=14 强制使用C++14标准 # -DOPENSSL_ROOT_DIR 指定OpenSSL路径(根据引用[2][3]) # -DBUILD_SHARED_LIBS=ON 避免静态链接问题 cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=14 \ -DOPENSSL_ROOT_DIR=/usr/local/openssl \ # 根据引用[2][3]修改实际路径 -DBUILD_SHARED_LIBS=ON \ -DBUILD_ONLY="s3;core" # 仅编译必要模块 # 编译安装 make -j$(nproc) sudo make install ``` #### 3. **设置动态库路径** ```bash # 避免运行时找不到AWS SDK库(根据引用[1][3]) export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH echo "export LD_LIBRARY_PATH=/usr/local/lib64:\$LD_LIBRARY_PATH" >> ~/.bashrc ``` --- ### 四、依赖库完整性验证 根据引用[3][4]确保以下依赖已安装: ```bash sudo yum install -y \ libcurl-devel \ zlib-devel \ pulseaudio-libs-devel \ openssl-devel # 优先使用系统OpenSSL,若自编译需指定路径 ``` --- ### 五、典型错误解决方案 #### **错误1:`undefined reference to std::__cxx11::basic_string`** **原因**:GCC 9的C++11 ABI与旧版本不兼容。 **解决**: ```bash # 编译时添加ABI兼容参数 export CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" ``` #### **错误2:`openssl/ssl.h: No such file`** **原因**:OpenSSL路径未正确指定(参考引用[2][3])。 **解决**: ```bash # 查找OpenSSL路径 find / -name ssl.h 2>/dev/null # 根据输出结果调整- DOPENSSL_ROOT_DIR参数 ``` --- ### 六、完整操作流程示例 ```bash # Step 1: 升级GCC(以SCL方式为例) sudo yum install centos-release-scl devtoolset-9-gcc* scl enable devtoolset-9 bash # Step 2: 安装依赖 sudo yum install -y cmake3 libcurl-devel zlib-devel openssl-devel # Step 3: 克隆AWS SDK git clone --recursive https://github.com/aws/aws-sdk-cpp.git cd aws-sdk-cpp && mkdir build && cd build # Step 4: CMake配置 cmake3 .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=14 \ -DBUILD_SHARED_LIBS=ON \ -DBUILD_ONLY="s3;core" # Step 5: 编译安装 make -j$(nproc) sudo make install ``` --- ### 七、性能优化建议 1. **并行编译加速** ```bash make -j$(nproc) # 使用所有CPU核心 ``` 2. **ccache缓存加速** ```bash sudo yum install ccache echo 'export PATH=/usr/lib64/ccache:$PATH' >> ~/.bashrc ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值