openEuler 25.09 系统级开发环境配置与实践(GCC + GDB + SDK)

本教程专门适配 openEuler 25.09 版本,所有命令都经过验证,可直接使用。

前言

在 Linux 系统上搭建开发环境往往让初学者感到困惑:软件源配置错误、依赖库缺失、编译器版本不匹配......这些问题都会阻碍开发进程。openEuler 25.09 作为企业级 Linux 发行版,虽然功能强大,但其独特的软件包管理体系需要专门的配置方法。

本教程是一份经过实战验证的完整配置手册,从第一步配置软件源开始,到最后验证开发环境,每个步骤都提供了可直接运行的命令和详细的说明。您不需要四处搜索资料,只需按照本教程逐步操作,即可在 30 分钟内搭建起包含 GCC、GDB、常用开发库的完整开发环境,立即开始您的编程工作。


一、配置软件源

1.1 备份原始配置

首先备份系统原有的软件源配置:

Bash 复制代码
# 备份原始源配置文件
sudo cp /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.backup

# 确认当前系统版本
cat /etc/os-release

1.2 配置官方镜像源

为了加速软件包下载,配置镜像源:

Bash 复制代码
sudo tee /etc/yum.repos.d/openEuler.repo > /dev/null << 'EOF'
[OS]
name=openEuler-25.09-OS
baseurl=https://repo.openeuler.org/openEuler-25.09/OS/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/openEuler-25.09/OS/$basearch/RPM-GPG-KEY-openEuler

[everything]
name=openEuler-25.09-Everything
baseurl=https://repo.openeuler.org/openEuler-25.09/everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/openEuler-25.09/OS/$basearch/RPM-GPG-KEY-openEuler

[EPOL]
name=openEuler-25.09-EPOL
baseurl=https://repo.openeuler.org/openEuler-25.09/EPOL/main/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/openEuler-25.09/OS/$basearch/RPM-GPG-KEY-openEuler

[update]
name=openEuler-25.09-Update
baseurl=https://repo.openeuler.org/openEuler-25.09/update/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/openEuler-25.09/OS/$basearch/RPM-GPG-KEY-openEuler
EOF

# 清理缓存并更新软件源
sudo dnf clean all
sudo dnf makecache

# 验证软件源配置成功
sudo dnf repolist

如果这一步不行 你自行找符合自己操作系统的 源!!!


二、安装 GCC 编译器

2.1 安装 GCC 工具链

openEuler 25.09 自带较新版本的 GCC(预计 GCC 12 或更高版本):

Bash 复制代码
# 安装 GCC 核心编译器
sudo dnf install -y gcc gcc-c++

# 安装编译必备工具
sudo dnf install -y make automake autoconf libtool

# 安装系统开发库
sudo dnf install -y glibc-devel kernel-headers kernel-devel

# 验证安装
gcc --version
g++ --version
make --version

2.2 测试 GCC 编译器

创建测试程序验证编译器:

Bash 复制代码
# 创建工作目录
mkdir -p ~/openeuler-dev
cd ~/openeuler-dev

# 创建 C 语言测试程序
cat > hello.c << 'EOF'
#include <stdio.h>

int main() {
    printf("===================================\n");
    printf("  欢迎使用 openEuler 25.09!\n");
    printf("===================================\n");
    printf("GCC 版本: %d.%d.%d\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
    printf("编译时间: %s %s\n", __DATE__, __TIME__);
    printf("系统架构: %s\n", 
#ifdef __x86_64__
        "x86_64"
#elif __aarch64__
        "ARM64"
#else
        "未知"
#endif
    );
    return 0;
}
EOF

# 编译 C 程序
gcc -o hello hello.c -Wall

# 运行程序
./hello

测试 C++ 编译器

Bash 复制代码
# 创建 C++ 测试程序(使用 C++20 特性)
cat > hello.cpp << 'EOF'
#include <iostream>
#include <vector>
#include <algorithm>
#include <ranges>

int main() {
    std::vector<int> numbers = {5, 2, 8, 1, 9, 3, 7, 4, 6};
    
    std::cout << "原始数组: ";
    for(auto n : numbers) std::cout << n << " ";
    std::cout << std::endl;
    
    // 使用 C++20 ranges 排序
    std::ranges::sort(numbers);
    
    std::cout << "排序后:   ";
    for(auto n : numbers) std::cout << n << " ";
    std::cout << std::endl;
    
    std::cout << "\n✅ C++ 编译器测试成功!" << std::endl;
    std::cout << "C++ 标准: " << __cplusplus << std::endl;
    return 0;
}
EOF

# 编译 C++ 程序(使用 C++20 标准)
g++ -o hello_cpp hello.cpp -std=c++20 -Wall

# 运行程序
./hello_cpp

三、安装调试工具 GDB

3.1 安装 GDB 调试器

Bash 复制代码
# 安装 GDB 调试器
sudo dnf install -y gdb

# 安装辅助调试工具
sudo dnf install -y strace ltrace

# 安装性能分析工具
sudo dnf install -y valgrind

# 验证安装
gdb --version
strace --version
valgrind --version

3.2 GDB 调试实战

创建调试测试程序:

Bash 复制代码
# 创建调试测试程序
cat > debug_test.c << 'EOF'
#include <stdio.h>

// 计算阶乘
int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

// 数组求和
int sum_array(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}

int main() {
    printf("=== GDB 调试演示程序 ===\n\n");
    
    // 测试阶乘函数
    int num = 5;
    printf("计算 %d 的阶乘\n", num);
    int result = factorial(num);
    printf("结果: %d! = %d\n\n", num, result);
    
    // 测试数组求和
    int numbers[] = {10, 20, 30, 40, 50};
    int total = sum_array(numbers, 5);
    printf("数组求和: %d\n", total);
    
    return 0;
}
EOF

# 编译时加上 -g 选项生成调试信息
gcc -g -o debug_test debug_test.c -Wall

# 先正常运行
./debug_test

GDB 调试命令速查

Bash 复制代码
# 启动 GDB
gdb ./debug_test

# 在 GDB 中常用命令:
(gdb) list                    # 查看源代码
(gdb) break main              # 在 main 函数设置断点
(gdb) break 18                # 在第 18 行设置断点
(gdb) info breakpoints        # 查看所有断点
(gdb) run                     # 运行程序
(gdb) next                    # 单步执行(不进入函数)
(gdb) step                    # 单步执行(进入函数)
(gdb) print num               # 打印变量值
(gdb) info locals             # 查看所有局部变量
(gdb) backtrace               # 查看调用栈
(gdb) continue                # 继续执行
(gdb) quit                    # 退出

四、安装开发库(SDK)

4.1 安装常用开发库

openEuler 25.09 提供了丰富的开发库:

Bash 复制代码
# 安装基础开发库
sudo dnf install -y zlib-devel bzip2-devel xz-devel

# 安装网络开发库
sudo dnf install -y openssl-devel libcurl-devel

# 安装数据库开发库
sudo dnf install -y sqlite-devel

# 安装 JSON 和 XML 处理库
sudo dnf install -y json-c-devel libxml2-devel

# 安装线程库
sudo dnf install -y libuv-devel

# 查看已安装的开发库
rpm -qa | grep devel | sort

4.2 测试开发库

测试 OpenSSL 库

Bash 复制代码
cat > ssl_test.c << 'EOF'
#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>
#include <openssl/opensslv.h>

void print_md5(const char *str) {
    unsigned char digest[MD5_DIGEST_LENGTH];
    MD5((unsigned char*)str, strlen(str), digest);
    
    printf("字符串: %s\n", str);
    printf("MD5 值: ");
    for(int i = 0; i < MD5_DIGEST_LENGTH; i++) {
        printf("%02x", digest[i]);
    }
    printf("\n");
}

int main() {
    printf("=== OpenSSL 开发库测试 ===\n");
    printf("OpenSSL 版本: %s\n\n", OPENSSL_VERSION_TEXT);
    
    print_md5("Hello openEuler 25.09!");
    
    printf("\n✅ OpenSSL 库测试成功!\n");
    return 0;
}
EOF

# 编译(链接 OpenSSL 库)
gcc -o ssl_test ssl_test.c -lssl -lcrypto -Wall

# 运行
./ssl_test

测试 SQLite 数据库

Bash 复制代码
cat > sqlite_test.c << 'EOF'
#include <stdio.h>
#include <sqlite3.h>

int main() {
    printf("=== SQLite 数据库测试 ===\n");
    printf("SQLite 版本: %s\n", sqlite3_libversion());
    
    sqlite3 *db;
    char *err_msg = 0;
    
    // 创建内存数据库
    int rc = sqlite3_open(":memory:", &db);
    
    if(rc == SQLITE_OK) {
        printf("✅ SQLite 数据库创建成功!\n");
        
        // 创建测试表
        const char *sql = "CREATE TABLE test(id INT, name TEXT);";
        rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
        
        if(rc == SQLITE_OK) {
            printf("✅ 数据表创建成功!\n");
        } else {
            printf("❌ 创建表失败: %s\n", err_msg);
            sqlite3_free(err_msg);
        }
        
        sqlite3_close(db);
    } else {
        printf("❌ SQLite 数据库创建失败!\n");
        return 1;
    }
    
    return 0;
}
EOF

# 编译
gcc -o sqlite_test sqlite_test.c -lsqlite3 -Wall

# 运行
./sqlite_test

五、实用开发技巧

5.1 创建快速编译脚本

Bash 复制代码
# 创建编译脚本
cat > ~/compile.sh << 'EOF'
#!/bin/bash
# openEuler 25.09 快速编译脚本

if [ $# -eq 0 ]; then
    echo "用法: ./compile.sh <源文件> [编译选项]"
    echo "示例: ./compile.sh hello.c"
    echo "示例: ./compile.sh hello.c -O3"
    exit 1
fi

SOURCE=$1
shift
EXTRA_FLAGS="$@"

BASENAME=$(basename "$SOURCE" | sed 's/\.[^.]*$//')
EXT="${SOURCE##*.}"

if [ "$EXT" = "c" ]; then
    echo "🔨 编译 C 程序: $SOURCE"
    gcc -o "$BASENAME" "$SOURCE" -Wall -O2 -g $EXTRA_FLAGS
elif [ "$EXT" = "cpp" ] || [ "$EXT" = "cc" ]; then
    echo "🔨 编译 C++ 程序: $SOURCE"
    g++ -o "$BASENAME" "$SOURCE" -std=c++20 -Wall -O2 -g $EXTRA_FLAGS
else
    echo "❌ 不支持的文件类型: $EXT"
    exit 1
fi

if [ $? -eq 0 ]; then
    echo "✅ 编译成功!输出文件: $BASENAME"
    echo "▶️  运行: ./$BASENAME"
    ls -lh "$BASENAME"
else
    echo "❌ 编译失败!"
    exit 1
fi
EOF

# 添加执行权限
chmod +x ~/compile.sh

# 测试
cd ~/openeuler-dev
~/compile.sh hello.c

5.2 配置开发环境别名

Bash 复制代码
# 添加到 ~/.bashrc
cat >> ~/.bashrc << 'EOF'

# ========== openEuler 25.09 开发环境 ==========
alias gcc-debug='gcc -g -Wall -Wextra'
alias g++-debug='g++ -g -Wall -Wextra -std=c++20'
alias gcc-opt='gcc -O3 -march=native -Wall'
alias g++-opt='g++ -O3 -march=native -Wall -std=c++20'
alias gdb-tui='gdb -tui'
alias ll='ls -lah --color=auto'
alias clean='rm -f *.o *.out a.out core.* *.so *.a'

# 显示开发环境信息
alias devinfo='echo "=== openEuler 25.09 开发环境 ===" && gcc --version | head -1 && g++ --version | head -1 && gdb --version | head -1 && make --version | head -1'

# 快速编译
alias qcc='gcc -Wall -O2 -g'
alias qcpp='g++ -Wall -O2 -g -std=c++20'

EOF

# 使配置生效
source ~/.bashrc

# 测试
devinfo

六、环境检查脚本

6.1 创建完整检查脚本

Bash 复制代码
# 创建环境检查脚本
cat > ~/check_env.sh << 'EOF'
#!/bin/bash

echo "=========================================="
echo "  openEuler 25.09 开发环境检查"
echo "=========================================="
echo ""

# 检查操作系统
echo "【系统信息】"
cat /etc/os-release | grep -E "PRETTY_NAME|VERSION"
echo "内核版本: $(uname -r)"
echo "系统架构: $(uname -m)"
echo ""

# 检查编译器
echo "【编译器】"
if command -v gcc >/dev/null 2>&1; then
    echo "✅ GCC: $(gcc --version | head -1)"
else
    echo "❌ GCC 未安装"
fi

if command -v g++ >/dev/null 2>&1; then
    echo "✅ G++: $(g++ --version | head -1)"
else
    echo "❌ G++ 未安装"
fi
echo ""

# 检查构建工具
echo "【构建工具】"
if command -v make >/dev/null 2>&1; then
    echo "✅ Make: $(make --version | head -1)"
else
    echo "❌ Make 未安装"
fi
echo ""

# 检查调试工具
echo "【调试工具】"
if command -v gdb >/dev/null 2>&1; then
    echo "✅ GDB: $(gdb --version | head -1)"
else
    echo "❌ GDB 未安装"
fi

if command -v valgrind >/dev/null 2>&1; then
    echo "✅ Valgrind: $(valgrind --version)"
else
    echo "❌ Valgrind 未安装"
fi
echo ""

# 检查开发库
echo "【开发库】"
for lib in zlib-devel openssl-devel libcurl-devel sqlite-devel json-c-devel; do
    if rpm -q $lib >/dev/null 2>&1; then
        echo "✅ $lib"
    else
        echo "❌ $lib (未安装)"
    fi
done
echo ""

# 检查软件源
echo "【软件源】"
sudo dnf repolist 2>/dev/null | grep -E "repo id|OS|everything|EPOL|update" || echo "❌ 软件源配置可能有问题"
echo ""

echo "=========================================="
echo "  检查完成!"
echo "=========================================="
EOF

# 添加执行权限
chmod +x ~/check_env.sh

# 运行检查
~/check_env.sh

可以看到我们的开发者环境 所有的组件都已安装完毕


八、常见问题解决

8.1 软件源问题

问题:dnf 找不到软件包

Bash 复制代码
# 解决方法1:更新缓存
sudo dnf clean all
sudo dnf makecache

# 解决方法2:检查软件源配置
sudo dnf repolist

# 解决方法3:搜索软件包
sudo dnf search gcc
sudo dnf search gdb

问题:下载速度慢

Bash 复制代码
# 切换到华为云镜像(参考第一章的备用方案)
# 或者使用阿里云镜像
sudo sed -i 's|mirrors.tuna.tsinghua.edu.cn|mirrors.aliyun.com|g' /etc/yum.repos.d/openEuler.repo
sudo dnf clean all
sudo dnf makecache

8.2 编译问题

问题:找不到头文件

Bash 复制代码
# 安装对应的 devel 包
sudo dnf provides */stdio.h
sudo dnf install -y glibc-devel

# 查找特定头文件
sudo dnf provides */openssl/ssl.h

问题:链接错误

Bash 复制代码
# 示例:undefined reference to `sqrt'
# 解决:链接数学库
gcc -o program program.c -lm

# 示例:undefined reference to `pthread_create'
# 解决:链接线程库
gcc -o program program.c -lpthread

8.3 GDB 调试问题

问题:看不到源代码

Bash 复制代码
# 确保编译时加了 -g 选项
gcc -g -o program program.c

# 使用 TUI 模式
gdb -tui ./program

九、openEuler 25.09 新特性

9.1 系统优势

9.2 开发工具优势

末尾 总结

通过本教程,您已经成功在 openEuler 25.09 上搭建了完整的 C/C++ 开发环境。现在您的系统具备:

✅ 核心能力

最新的 GCC/G++ 编译器(支持 C++20/C++23)

专业的 GDB 调试器和性能分析工具

丰富的系统开发库(网络、数据库、加密、解析等)

高效的开发辅助脚本和命令别名

下一步建议

实践项目:尝试编写多文件项目,使用 Makefile 或 CMake 管理构建

深入调试:学习 GDB 的高级功能(条件断点、watchpoint、core dump 分析)

版本控制:安装 Git(sudo dnf install git),学习代码版本管理

性能优化:使用 Valgrind、perf 等工具进行性能分析和内存检测

探索生态:了解 openEuler 的容器、虚拟化、云原生等特性

祝您在 openEuler 25.09 上开发顺利!🎊

如果您正在寻找面向未来的开源操作系统,不妨看看DistroWatch 榜单中快速上升的 openEuler:distrowatch.com/table-mobil...,一个由开放原子开源基金会孵化、支持"超节点"场景的Linux 发行版。 openEuler官网:www.openeuler.openatom.cn/zh/

相关推荐
Java水解10 分钟前
Spring Boot 配置文件深度解析
spring boot·后端
狗头大军之江苏分军17 分钟前
Node.js 性能优化实践,但老板只关心是否能跑
前端·后端
李拾叁的摸鱼日常26 分钟前
Java泛型基本用法与PECS原则详解
java·后端·面试
狗头大军之江苏分军26 分钟前
Node.js 真香,但每次部署都想砸电脑
前端·javascript·后端
帅那个帅1 小时前
go的雪花算法代码分享
开发语言·后端·golang
酒酿萝卜皮1 小时前
Elastic Search 聚合查询
后端
程序员清风1 小时前
阿里二面:新生代垃圾回收为啥使用标记复制算法?
java·后端·面试
sino爱学习1 小时前
Java 三元表达式(?:)的常见坑总结
java·后端
❀͜͡傀儡师1 小时前
Spring Boot函数式编程:轻量级路由函数替代传统Controller
java·spring boot·后端