linux 中,gcc -c 产生目标代码,-o连接文件。其实很多时候直接-o就可以了,为什么要-c呢?

 我来答
bennysu
2010-01-17 · TA获得超过749个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:219万
展开全部
-o 表示产生目标文件。
-c 表示只编译代码但不进行链接,加改参数生成的目标文件是不能执行的(我们常用的链接库就是这样得来的)。

通常在只有一个源文件的情况下不需要加-c。但实际上大多数情况下C程序远不止1个源文件,当main函数需要调用不在同一源文件下的函数时就需要链接到包含该函数的目标文件。
举个例子:
/*main.c*/
#include<stdio.h>
int main(){
test();
}

/*test.c*/
#include<stdio.h>
extern void test(){
}

编译步骤:
gcc -c test.c -o test
gcc test main.c -o main
百度网友a954a3a
推荐于2017-11-28 · 超过19用户采纳过TA的回答
知道答主
回答量:47
采纳率:50%
帮助的人:31.1万
展开全部
在一些大型的项目中,程序的源文件不止一个,而且也不一定是一个人编写的,比如有一个C编写项目,包含3个c文件,分别是:main.c subfun1.c subfun2.c
分别由三个人编写,在main.c中调用了其他两个文件中的函数.
现在,subfun1.c编写好了,就可以先编译一下
:gcc -c subfun1.c 如果编译生成subfun1.o说明语法没错误,这个就OK了,等其他连个文件也编写好了,分别编译一下,连接起来就行了.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李炳烨
2010-01-17 · TA获得超过264个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:161万
展开全部
是为了教学方便。。

书上这么写是为了让你知道,将源代码编译成可执行程序的大概过程,起码让你们知道有目标代码这种文件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
whl287
2010-01-22 · TA获得超过595个赞
知道小有建树答主
回答量:429
采纳率:0%
帮助的人:0
展开全部
-c只编译不链接,生成object文件
如果不加-c只使用-o选项,gcc会调用ld来链接生成可执行的二进制文件
与-c类似的选项有-E只预处理,-s生成汇编文件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式