我有一些C源文件,我正在使用gcc。基本上,我希望编译所有这些文件并创建一个单一的对象文件。当我尝试:
gcc -c src1.c src2.c src3.c -o final.o我得到:
gcc: cannot specify -o with -c or -S with multiple files如果我试着:
gcc -c src1.c src2.c src3.c我得到了三个不同的目标文件。我如何告诉gcc编译所有文件以返回一个对象文件(我还想指定它的名称)?谢谢。
也许还有另一种更常见的方法,在这种情况下请告诉我。
发布于 2013-08-12 08:17:25
无法将多个源文件编译为单个对象文件。对象文件是单个源文件及其头部(也称为https://en.wikipedia.org/wiki/Translation_unit_(programming%29) )的编译结果。
如果要组合已编译的文件,通常使用ar命令将其组合到静态库中:
$ ar cr libfoo.a file1.o file2.o file3.o然后,您可以在链接时使用这个静态库,或者将其直接作为对象文件传递:
$ gcc file4.o libfoo.a -o myprogram或将其链接为带有-l标志的库。
$ gcc file4.o -L. -lfoo -o myprogram发布于 2013-08-12 08:17:43
这并不是通常的做法,但您可以通过创建一个具有以下内容的新final.c文件轻松地实现您想要的结果。
#include "src1.c"
#include "src2.c"
#include "src3.c"然后,您可以按以下方式编译它。
gcc -c final.c -o final.o请注意,即使每个文件在单独编译时成功编译,也可能存在问题,请阅读编译错误。当以这种方式将源文件合并到单个源文件时,这种情况往往发生在宏定义和包含中。
发布于 2013-08-12 08:17:13
也许你在找这个:
ld -r src1.o src2.o src3.o -o final.o但是让他们存档总是很好的,使用
ar rvs libmy.a file1.o file2.o file3.o
然后使用-lmy链接。
https://stackoverflow.com/questions/18182176
复制相似问题