首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将多个C源代码编译成一个唯一的对象文件

将多个C源代码编译成一个唯一的对象文件
EN

Stack Overflow用户
提问于 2013-08-12 08:09:53
回答 8查看 34.6K关注 0票数 21

我有一些C源文件,我正在使用gcc。基本上,我希望编译所有这些文件并创建一个单一的对象文件。当我尝试:

代码语言:javascript
复制
gcc -c src1.c src2.c src3.c -o final.o

我得到:

代码语言:javascript
复制
gcc: cannot specify -o with -c or -S with multiple files

如果我试着:

代码语言:javascript
复制
gcc -c src1.c src2.c src3.c

我得到了三个不同的目标文件。我如何告诉gcc编译所有文件以返回一个对象文件(我还想指定它的名称)?谢谢。

也许还有另一种更常见的方法,在这种情况下请告诉我。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-08-12 08:17:25

无法将多个源文件编译为单个对象文件。对象文件是单个源文件及其头部(也称为https://en.wikipedia.org/wiki/Translation_unit_(programming%29) )的编译结果。

如果要组合已编译的文件,通常使用ar命令将其组合到静态库中:

代码语言:javascript
复制
$ ar cr libfoo.a file1.o file2.o file3.o

然后,您可以在链接时使用这个静态库,或者将其直接作为对象文件传递:

代码语言:javascript
复制
$ gcc file4.o libfoo.a -o myprogram

或将其链接为带有-l标志的库。

代码语言:javascript
复制
$ gcc file4.o -L. -lfoo -o myprogram
票数 26
EN

Stack Overflow用户

发布于 2013-08-12 08:17:43

这并不是通常的做法,但您可以通过创建一个具有以下内容的新final.c文件轻松地实现您想要的结果。

代码语言:javascript
复制
#include "src1.c"
#include "src2.c"
#include "src3.c"

然后,您可以按以下方式编译它。

代码语言:javascript
复制
gcc -c final.c -o final.o

请注意,即使每个文件在单独编译时成功编译,也可能存在问题,请阅读编译错误。当以这种方式将源文件合并到单个源文件时,这种情况往往发生在宏定义和包含中。

票数 12
EN

Stack Overflow用户

发布于 2013-08-12 08:17:13

也许你在找这个:

代码语言:javascript
复制
ld -r src1.o src2.o src3.o -o final.o

但是让他们存档总是很好的,使用

ar rvs libmy.a file1.o file2.o file3.o

然后使用-lmy链接。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18182176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档