登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
资源区
›
代码
›
c语言的编译与调试
c语言的编译与调试
[ 复制链接 ]
捡嫌
2025-6-4 16:50:09
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
1. GCC/G++
gcc和g++是GNU Compiler Collection中的编译器,分别用于编译C和C++程序。它们的编译过程主要包括四个步骤:预处理(Pre-Processing)、编译(Compiling)、汇编(Assembling)、链接(Linking)。
1.1 编译过程
预处理(Pre-Processing)
:
gcc -E hello.c -o hello.i
复制代码
对hello.c文件进行预处理,生成预处理文件hello.i。
作用
:扩展宏、包含头文件、处理条件编译、删除注释等。
编译(Compiling)
:
gcc -S hello.i -o hello.s
复制代码
对预处理文件进行编译,生成汇编文件hello.s。
作用
:将高级语言代码转换为汇编语言,便于进一步转换为机器代码。
汇编(Assembling)
:
gcc -c hello.s -o hello.o
复制代码
对汇编文件进行汇编,生成目标文件hello.o。
作用
:将汇编代码转换为机器代码,包含程序的二进制指令,但还未链接库函数或其他目标文件。
链接(Linking)
:
gcc hello.o -o hello
复制代码
对目标文件进行链接,生成可执行文件hello。
作用
:生成最终的可执行程序,可以在目标操作系统上运行。
可以一步完成所有过程:
gcc hello.c -o hello
复制代码
或者只生成目标文件:
gcc -c hello.c -o hello.o
复制代码
1.2 GCC基本使用
编译单个C文件并生成可执行文件
:
gcc -o outputfile sourcefile.c
复制代码
-o outputfile:指定输出的可执行文件名。
sourcefile.c:要编译的源文件。
编译多个C文件并生成可执行文件
:
gcc -o myprogram file1.c file2.c file3.c
复制代码
编译并生成目标文件(.o文件)
:
gcc -c file.c
复制代码
-c:仅编译,生成目标文件(object file)。
指定头文件目录
:
gcc -Iinclude -o myprogram src/file1.c src/file2.c
复制代码
-Iinclude:指定包含头文件的目录include。
详细解释
:
-I 选项用于指定头文件的搜索目录。这在包含自定义头文件或者头文件不在标准目录时非常有用。
头文件(.h或.hpp文件)通常包含函数声明、宏定义、数据类型、预处理指令等。当编写一个程序时,头文件可以被多个源文件包含,以便共享这些声明和定义。
编译器默认会在一些标准目录中搜索头文件,比如 /usr/include 和 /usr/local/include。如果头文件不在这些默认目录中,编译器就无法找到它们,会报错。
使用 -I 选项可以告诉编译器在指定目录中搜索头文件。假设你的头文件在一个自定义目录中,比如 include 目录,可以使用以下命令:
gcc -Iinclude -o myprogram src/main.c
复制代码
这样编译器就会在 include 目录中找到头文件。以下是一个示例:
// include/myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H
void myFunction();
#endif
// src/main.c
#include "myheader.h"
#include <stdio.h>
void myFunction() {
printf("Hello from myFunction!\n");
}
int main() {
myFunction();
return 0;
}
复制代码
编译命令:
gcc -Iinclude -o myprogram src/main.c
复制代码
链接目标文件生成可执行文件
:
gcc -o myprogram file1.o file2.o
复制代码
1.3 GCC常用选项
编译优化
:
-O1、-O2、-O3:不同级别的优化。
-Os:优化生成的代码大小。
调试信息
:
-g:生成调试信息,用于调试程序。
警告信息
:
-Wall:启用所有常见的警告。
-Werror:将所有警告视为错误。
1.4 G++使用
g++用于编译C++程序,使用方法与gcc类似:
编译单个C++文件并生成可执行文件
:
g++ -o outputfile sourcefile.cpp
复制代码
编译多个C++文件并生成可执行文件
:
g++ -o myprogram file1.cpp file2.cpp
复制代码
编译并生成目标文件(.o文件)
:
g++ -c file.cpp
复制代码
-c:仅编译,生成目标文件(object file)。
指定头文件目录
:
g++ -Iinclude -o myprogram src/file1.cpp src/file2.cpp
复制代码
-Iinclude:指定包含头文件的目录include。
链接目标文件生成可执行文件
:
g++ -o myprogram file1.o file2.o
复制代码
2.Makefile
Makefile 是用于自动化编译和构建软件项目的工具。在大型项目中,手动编译每个文件非常繁琐,使用 Makefile 可以简化这一过程。Makefile 由一系列规则(rules)组成,每个规则包含目标(target)、依赖(dependencies)和命令(commands)。
2.1 基本结构
一个基本的 Makefile 的规则结构如下:
target: dependencies
command
复制代码
target
:要生成的文件或目标,可以是可执行文件、目标文件或其他规则。
dependencies
:生成目标所依赖的文件或其他目标。
command
:生成目标所需执行的命令。
2.2 示例
假设有以下项目结构:
project/
├── include/
│ └── myheader.h
├── src/
│ ├── main.c
│ ├── file1.c
│ ├── file2.c
├── Makefile
复制代码
Makefile 内容如下:
# 指定编译器
CC = gcc
# 编译选项
CFLAGS = -Wall -g -Iinclude
# 源文件目录
SRC_DIR = src
# 所有的源文件
SRCS = $(wildcard $(SRC_DIR)/*.c)
# 生成的目标文件
OBJS = $(SRCS:.c=.o)
# 生成的可执行文件名
TARGET = myprogram
# 默认规则,生成最终的可执行文件
all: $(TARGET)
# 生成最终的可执行文件 $(TARGET),依赖所有目标文件 $(OBJS)
$(TARGET): $(OBJS)
$(CC) -o $@ $^
# 生成目标文件的规则
$(SRC_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理规则
clean:
rm -f $(OBJS) $(TARGET)
# 打印文件列表
print:
@echo "Source files: $(SRCS)"
@echo "Object files: $(OBJS)"
# 伪目标
.PHONY: all clean print
复制代码
2.3 变量
CC
:指定编译器,通常为 gcc 或 g++。
CFLAGS
:编译选项,如包含目录(-I)、警告(-Wall)、调试信息(-g)等。
SRCS
:源文件列表,由 wildcard 函数生成。
OBJS
:目标文件列表,由源文件列表通过模式替换生成。
TARGET
:最终生成的可执行文件名。
2.4 规则说明
<ul>
all 规则
:
all: $(TARGET)
复制代码
默认规则,生成目标文件 $(TARGET)。
$(TARGET) 规则
:
$(TARGET): $(OBJS)
$(CC) -o $@ $^
复制代码
生成最终的可执行文件 $(TARGET),依赖所有目标文件 $(OBJS)。
模式规则
:
$(SRC_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
复制代码
通用规则,将 .c 文件编译为 .o 文件。$
语言
编译
调试
相关帖子
快速上手Ultimate++的编译链接和配置
C语言版2048小游戏
语言开发随笔2
MWGA 双线编译技术方案:一份代码,双端生成
MAF快速入门(15)Agent调试利器:DevUI
记调试 RX-Explorer-WAS 文件管理器 UI 未响应问题
一款Go语言Gin框架DDD脚手架,适合快速搭建项目
PHP 的问题不在语言本身,而在我们怎么写它
从0到1,无代码微调并部署本地大语言模型LLM
嵌入式Linux手动交叉编译开源软件需要注意的问题
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
快速上手Ultimate++的编译链接和配置
11
669
蟠鲤
2026-01-29
业界
C语言版2048小游戏
18
854
辖瑁地
2026-02-02
业界
语言开发随笔2
17
965
峰邑
2026-02-02
业界
MWGA 双线编译技术方案:一份代码,双端生成
15
647
焦听云
2026-02-05
业界
MAF快速入门(15)Agent调试利器:DevUI
3
743
魁睥
2026-02-09
安全
记调试 RX-Explorer-WAS 文件管理器 UI 未响应问题
3
10
疝镜泛
2026-02-12
业界
一款Go语言Gin框架DDD脚手架,适合快速搭建项目
2
760
姚梨素
2026-02-13
业界
PHP 的问题不在语言本身,而在我们怎么写它
0
320
匡菲
2026-02-14
业界
从0到1,无代码微调并部署本地大语言模型LLM
2
803
萨瑞饨
2026-02-16
业界
嵌入式Linux手动交叉编译开源软件需要注意的问题
0
798
嗳诿
2026-02-17
回复
(16)
僭墙覆
2025-11-6 12:34:37
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
县挫伪
2025-12-31 21:29:12
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
酒跚骼
2026-1-2 15:53:35
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
昆拗干
2026-1-17 06:20:06
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
缄戈
2026-1-19 09:23:20
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
港髁
2026-1-20 13:16:26
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
支智敏
2026-1-21 06:44:54
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
锺冰洁
2026-1-24 12:49:41
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
闻人莹华
2026-1-26 06:59:52
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
揭荸
2026-1-27 03:59:05
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个有用。
损注
2026-2-4 04:57:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
支智敏
2026-2-8 07:57:06
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
上官银柳
2026-2-8 16:49:41
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
奄幂牛
2026-2-8 20:05:26
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
归筠溪
2026-2-9 15:10:34
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
郗燕岚
2026-2-13 08:13:07
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
过来提前占个楼
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
科技
签约作者
程序园优秀签约作者
发帖
捡嫌
2026-2-13 08:13:07
关注
0
粉丝关注
23
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9897
6
韶又彤
9918
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9883
10
遗憩
10006
查看更多
今日好文热榜
3
CSP-J2025游记
6
从挖矿木马入侵到 Docker Rootless 加固,
319
OpenClaw多Agent协作踩坑实录:从翻车到跑
713
【节点】[MainLightShadow节点]原理解析与
633
模拟退火算法
902
Claude Code 的 Skills 可以在 Trae IDE 中
254
付费 AI 用户和免费用户之间,究竟差了什么
699
手把手教你使用vscode开发stm32!
1003
“老东西,你懦弱了”——关于Vibe Coding
926
告别Hyprland/Niri键鼠共享难题:Pynergy
752
解惑|公司员工健身房需要哪些器材?上海皓
519
凸优化数学基础笔记(六):凸集、凸函数与
3
【强化学习的数学原理-赵世钰】随记
389
SeeDance2.0提示词之跳舞女孩
11
SeeDance2.0提示词之跳舞女孩
683
国内零门槛首个免费 开源 7×24小时帮
572
[拆解LangChain执行引擎]非常规Pending Wri
2
读人工智能全球格局:未来趋势与中国位势10
70
AI开发-python-milvus向量数据库(2-8 -mil
3
[LKD/Linux 内核] Linux 中的 进程, 线程