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/

相关推荐
熬了夜的程序员1 小时前
【RUSTFS】rustfs的go语言sdk
开发语言·后端·golang
梅兮昂1 小时前
CentOS7.6 单机部署 K8S 集群
后端
YIN_O1 小时前
目标检测模型量化加速在 openEuler 上的实现
后端
盛小夏2点0版1 小时前
🐍「Python 终端彩色时钟」:彩虹渐变 + HSV 调色,30 行代码让命令行走起!
后端
YIN_O1 小时前
ResNet 图像分类在 openEuler 上的性能大揭秘
后端
程序员小假1 小时前
我们来说一说 Redis IO 多路复用模型
java·后端
兔子零10241 小时前
nginx 配置长跑(下):全局变量、调试思路与可观测性
后端·nginx
okseekw1 小时前
一篇吃透函数式编程:Lambda表达式与方法引用
java·后端
Lear1 小时前
【SQL】联表查询全面指南:掌握JOIN的艺术与科学
后端