离线编译安装GCC 13.2

1、下载最新的源代码文件 gcc-13.2.0.tar.xzhttps://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.xz解压后,根据 contrib/download_prerequisites 中的依赖文件包

gmp='gmp-6.2.1.tar.bz2'
mpfr='mpfr-4.1.0.tar.bz2'
mpc='mpc-1.2.1.tar.gz'
isl='isl-0.24.tar.bz2'

base_url='https://gcc.gnu.org/pub/gcc/infrastructure/'

放入源文件目录,注释掉 download_prerequisites中的下载和校验

e5c0df9a50d54a788516e7d36c7f3704.png

 运行./contrib/download_prerequisites ,解压下载的依赖包,完成后提示  All prerequisites downloaded successfully.

在源码目录新建一个build文件夹 : mkdir build

目录结构如下:

aaa3f158e47f4fc68e30ebe9f5d080a0.png

 2、进入build文件夹,执行

#../configure --enable-threads=posix -enable-checking=release -enable-languages=c,c++ -disable-multilib

#make –j6   编译

#make install    安装

make install DESTDIR=/your/dir

3、修改系统使用的gcc/g++

    一般gcc/g++会安装到/usr/local/bin中,而编译时默认使用的是/usr/bin中的版本,因此,需要重新制作链接。
    sudo rm -rf /usr/bin/gcc
    sudo rm -rf /usr/bin/g++
    sudo ln -s /usr/local/bin/gcc /usr/bin/gcc
    sudo ln -s /usr/local/bin/g++ /usr/bin/g++

 最后,检验安装是否成功.查看版本。会看到:gcc -v

程序运行时,搜索库的路径一般是/usr/lib64优先于/usr/local/lib64,导致程序运行时报错:

[root@rocky95 ~]# ./a.out 
./a.out: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.**' not found (required by ./a.out)

修改系统配置文件,改变默认库文件搜索顺序 

[root@rocky95 ld.so.conf.d]# echo '/usr/local/lib64' | tee /etc/ld.so.conf.d/locallib64.conf
/usr/local/lib64
[root@rocky95 ld.so.conf.d]# cat locallib64.conf 
/usr/local/lib64
[root@rocky95 ld.so.conf.d]# echo '/usr/local/lib' | tee /etc/ld.so.conf.d/locallib.conf
/usr/local/lib
[root@rocky95 ld.so.conf.d]# cat locallib.conf 
/usr/local/lib
[root@rocky95 ld.so.conf.d]# ldconfig


修改了配置文件后,你需要运行ldconfig命令来更新缓存,这样更改才会生效。

4、cmake中的配置

set(CMAKE_C_COMPULER "/usr/local/bin/gcc")
set(CMAKE_CXX_COMPULER "/usr/local/bin/g++")
 

几个环境变量:

vim /etc/profile  # 最下方添加以下内容
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
export LD_LIBRARY_PATH="/usr/local/lib64:$LD_LIBRARY_PATH"
export PATH="/usr/local/bin:$PATH"

PATH是系统查找可执行文件的路径,系统通过PATH寻找这个命令,再运行这个命令(可执行文件)。所以,PATH 配置的路径下的可执行程序可以在任何位置执行,并且可以通过which来定位命令文件的位置。

LIBRARY_PATHLD_LIBRARY_PATH 的主要区别在于它们的使用阶段和作用
‌LIBRARY_PATH‌:主要用于程序编译阶段,告诉编译器(如gcc)在编译时寻找动态链接库(.so文件)的附加搜索路径。
当编译一个程序并且该程序依赖于某些非标准路径下的共享库时,设置LIBRARY_PATH可以确保编译器找到这些库并正确链接到可执行文件中‌。

‌LD_LIBRARY_PATH‌:主要用于程序运行阶段,指定动态链接器(ld.so)在加载已编译好的可执行文件时查找动态链接库的额外路径。
当一个可执行文件需要加载系统默认路径之外的共享库来运行时,设置LD_LIBRARY_PATH可以让操作系统在运行时找到并加载那些非标准位置的动态链接库‌。

C_INCLUDE_PATH、CPLUS_INCLUDE_PATH以及CPATH常被用于在全局性地添加预处理C/C++时的包含目录,其中C_INCLUDE_PATH仅对预处理C有效,CPLUS_INCLUDE_PATH仅对预处理C++有效,而CPATH对所有语言均有效

5、使用标准库模块

# 首先编译 std 模块生成 CMI (gcm.cache),参数不变不用重新编译
g++ -std=c++23 -fmodules -O2 -c -fmodule-only -fsearch-include-path bits/std.cc

# 然后就可以编译自己的源文件了
g++ -std=c++23 -fmodules -O2 hello.cpp -o hello.out

[root@rocky95 ~]# cat hello.cpp 
import std;

//#include<iostream>


int main() {
     std::println("hello world");
    //std::cout<<"hello world"<<std::endl;
    return 0;
}
[root@rocky95 ~]# 
[root@rocky95 ~]#

    cmake编译

[root@rocky95 ~]# cat CMakeLists.txt 
cmake_minimum_required(VERSION 3.10)
project(Hello)
#set(CMAKE_VERBOSE_MAKEFILE ON)

add_custom_command(
    OUTPUT gcm.cache/std.gcm
    COMMAND g++ -std=c++23 -fmodules -O3 -c -fmodule-only -fsearch-include-path bits/std.cc
)

add_custom_command(
    OUTPUT hello.out
    COMMAND g++ -std=c++23 -fmodules -O3  hello.cpp -o hello.out
)

add_custom_target(
    target ALL
    DEPENDS gcm.cache/std.gcm hello.out
)
[root@rocky95 ~]# 

### 如何将 MinGW-w64 安装到 D 盘 为了实现将 MinGW-w64 安装至 D 盘的目标,可以按照以下方法操作: #### 1. **下载合适的 MinGW-w64 版本** 访问可信资源站点获取适合的 MinGW-w64 编译器版本。例如,在 GitHub 的 `niXman/mingw-builds-binaries` 仓库中提供了多个预构建二进制文件[^4]。或者通过其他推荐链接找到对应版本的离线安装包[^3]。 如果需要最新稳定版,则可以选择类似于“mingw-w64-gcc-13.2-stable-r40”的压缩包[^2];如果目标环境有特定需求(如与 MATLAB 兼容),则应选用指定版本(如 MinGW-w64 6.3)。 #### 2. **选择并下载所需架构** 对于 Windows 平台上的大多数开发场景,“x86_64-posix-seh”是一个常用选项[^1]。此配置适用于 64 位系统,并提供良好的 POSIX 支持以及结构化异常处理功能。 #### 3. **解压到自定义位置** 使用工具如 7-Zip 打开所下载的 `.zip` 或 `.tar.xz` 文件,并将其提取出来。注意不要直接覆盖默认路径而是手动设置为目标磁盘中的某个目录。比如: ```bash d:\tools\mingw64\ ``` 这样做不仅便于管理还能够避免权限问题带来的麻烦。 #### 4. **验证安装成功与否** 确认解压完成后得到名为 `mingw64` 的根文件夹内含 bin 子目录以及其他必要组件。可以通过运行简单的测试命令来检验是否正常工作: ```cmd cd /d D:\tools\mingw64\bin gcc --version ``` 正确返回 GCC 的具体信息即表明安装无误。 #### 5. **配置环境变量(可选)** 若要让全局范围内都能识别该编译链而无需每次都切换当前工作区的话, 可考虑添加 PATH 环境变量项指向上述实际存放地址下的 `\bin` 子文件夹. --- ### 示例代码片段展示如何修改Windows系统的PATH环境变量 以下是 PowerShell 中用于永久更改用户级别 Path 的一段脚本例子: ```powershell $newPathItem = 'D:\tools\mingw64\bin' $currentPath = [System.Environment]::GetEnvironmentVariable('Path', [System.EnvironmentVariableTarget]::User) if (-not ($currentPath.Contains($newPathItem))) { $updatedPath = "$currentPath;$newPathItem" [System.Environment]::SetEnvironmentVariable('Path', $updatedPath, [System.EnvironmentVariableTarget]::User) } ``` 执行以上指令之后需重启任何已打开的应用程序窗口才能生效新设定好的路由规则。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值