文章目录
一、环境准备(RakSmart服务器)
- 登录服务器bash复制下载ssh root@your_raksmart_server_ip
- 安装gcc/g++
- CentOS/RHEL系统:bash复制下载yum update -y yum install -y gcc gcc-c++ make
- Ubuntu/Debian系统:bash复制下载apt update -y apt install -y build-essential
- 验证安装bash复制下载gcc –version # 输出:gcc (GCC) x.x.x g++ –version # 输出:g++ (GCC) x.x.x
二、gcc/g++编译四阶段详解(附命令演示)
以C程序 hello.c
为例:
c
#include <stdio.h> #define MSG "Hello, RakSmart!" int main() { printf("%s\n", MSG); return 0; }
1. 预处理(Preprocessing)
- 作用:展开宏/头文件,删除注释
- 命令:bash复制下载gcc -E hello.c -o hello.i
- 查看文件:bash复制下载head -n 20 hello.i # 可看到<stdio.h>被展开
2. 编译(Compilation)
- 作用:将预处理代码转为汇编代码
- 命令:bash复制下载gcc -S hello.i -o hello.s
- 查看汇编:bash复制下载cat hello.s # 输出x86汇编代码
3. 汇编(Assembly)
- 作用:将汇编代码转为机器码(目标文件)
- 命令:bash复制下载gcc -c hello.s -o hello.o
- 查看目标文件:bash复制下载file hello.o # 输出:ELF 64-bit LSB relocatable
4. 链接(Linking)
- 作用:合并目标文件和库文件生成可执行文件
- 命令:bash复制下载gcc hello.o -o hello
- 运行:bash复制下载./hello # 输出:Hello, RakSmart!
三、关键编译选项
选项 | 作用 | 示例 |
---|---|---|
-Wall | 启用所有警告 | gcc -Wall hello.c |
-g | 添加调试信息 | gcc -g -o debug_app hello.c |
-O2 | 优化级别2 | gcc -O2 -o fast_app hello.c |
-I | 指定头文件路径 | gcc -I/myinclude hello.c |
-L | 指定库文件路径 | gcc -L/mylibs -lmylib hello.c |
-D | 定义宏 | gcc -DDEBUG_MODE hello.c |
四、多文件编译(实战演示)
- 文件结构bash复制下载# math_utils.h int add(int a, int b); # math_utils.c int add(int a, int b) { return a + b; } # main.c #include “math_utils.h” int main() { printf(“5+3=%d\n”, add(5,3)); return 0; }
- 编译方法
- 一步编译:bash复制下载gcc main.c math_utils.c -o calculator
- 分步编译:bash复制下载gcc -c math_utils.c -o math_utils.o gcc -c main.c -o main.o gcc main.o math_utils.o -o calculator
五、静态库与动态库
- 创建静态库bash复制下载ar rcs libmath.a math_utils.o gcc main.c -L. -lmath -o static_app
- 创建动态库bash复制下载gcc -shared -fPIC -o libmath.so math_utils.c gcc main.c -L. -lmath -o dynamic_app export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH # 设置库路径
六、调试与优化
- GDB调试bash复制下载gcc -g -o debug_app hello.c gdb ./debug_app (gdb) break main # 设置断点 (gdb) run # 运行程序 (gdb) print MSG # 查看宏值
- 性能优化对比
- 无优化:
time ./hello
- O3优化:
gcc -O3 -o fast_hello hello.c && time ./fast_hello
- 无优化:
七、Makefile自动化(示例)
makefile
复制
下载
CC = gcc CFLAGS = -Wall -O2 TARGET = app all: $(TARGET) $(TARGET): main.o math_utils.o $(CC) $^ -o $@ %.o: %.c $(CC) $(CFLAGS) -c $< clean: rm -f *.o $(TARGET)
使用:make && ./app
关键原理总结
- 预处理 → 编译 → 汇编 → 链接 是C/C++程序的核心编译流程
- 静态库(.a)在编译时嵌入,动态库(.so)在运行时加载
-g
与GDB配合实现源码级调试,-O
系列优化影响生成代码效率- Makefile通过依赖关系实现增量编译,提升开发效率
通过RakSmart服务器实践上述操作,可深入掌握Linux开发工具链的核心工作流程。
618闪促秒杀
半价秒杀,享续费同价
产品 | CPU | 内存 | 硬盘 | 带宽/流量 | 秒杀价/月 | 购买链接 |
SV VPS | 2核 | 2G | 40G SSD | 10M | $63.4 | 点击购买 |
SV RAK Cloud | 2核 | 4G | 40G系统盘 | 10M | $41.00 | 点击购买 |
LA E3-1230, BGP 1000M/Unlimited | E3 1230 | 16G | 1T 固态硬盘 | 国际BGP 1G 独享 不限 | $59.00 | 点击购买 |
LA Bare – Metal | E5 – 2620 | 32G | 1T 机械硬盘 | 大陆优化VIP | $109 | 点击购买 |
1. 秒杀产品购买后,不支持退款;
2. 秒杀产品不支持使用优惠券;
3. 秒杀产品每日限量20台,先到先得,售完即止;
4. 秒杀产品每个用户当月限购5台;
5. 秒杀活动注册成为RAKsmart用户均可参与,且最终解释权为RAKsmart所有。
1. 新用户专享充值赠送活动,新注册RAKsmart用户参与;
2. 充值获得赠送金,有效期30天,可用于新购;
3. 充值赠送需在活动页面充值指定金额获得,不限充值次数;
4. 充值赠送金额为充值福利,不可提现;
5. 单笔订单中充值赠送金可100%比例使用;
6. 充值赠送活动最终解释权为RAKsmart 所有。