我有一些C源文件,我正在使用gcc.我基本上想要编译所有这些并创建一个单个目标文件.当我尝试:
gcc -c src1.c src2.c src3.c -o final.o
Run Code Online (Sandbox Code Playgroud)
我明白了:
gcc: cannot specify -o with -c or -S with multiple files
Run Code Online (Sandbox Code Playgroud)
如果我尝试:
gcc -c src1.c src2.c src3.c
Run Code Online (Sandbox Code Playgroud)
我得到三个不同的目标文件.如何gcc编译所有文件以返回单个目标文件(我还要指定其名称)?谢谢.
也许还有另一种更常见的方法,在这种情况下请告诉我.
Som*_*ude 15
您无法将多个源文件编译为单个目标文件.目标文件是单个源文件及其标头(也称为转换单元)的编译结果.
如果要组合编译的文件,通常使用以下ar命令将其组合到静态库中:
$ ar cr libfoo.a file1.o file2.o file3.o
Run Code Online (Sandbox Code Playgroud)
然后,您可以在链接时使用此静态库,或者将其直接作为目标文件传递:
$ gcc file4.o libfoo.a -o myprogram
Run Code Online (Sandbox Code Playgroud)
或者将其作为带有-l标志的库链接
$ gcc file4.o -L. -lfoo -o myprogram
Run Code Online (Sandbox Code Playgroud)
Did*_*set 11
这不是常用的方法,但您可以通过创建final.c包含以下内容的新文件轻松实现所需目的.
#include "src1.c"
#include "src2.c"
#include "src3.c"
Run Code Online (Sandbox Code Playgroud)
然后你可以编译如下.
gcc -c final.c -o final.o
Run Code Online (Sandbox Code Playgroud)
请注意,即使每个文件在单独编译时成功编译,也可能存在问题,读取编译错误.这种情况往往发生在宏定义中,包括在将源文件以这种方式合并为单个文件时.
可能你在找这个:
ld -r src1.o src2.o src3.o -o final.o
Run Code Online (Sandbox Code Playgroud)
但是使用它们归档它总是很好的
ar rvs libmy.a file1.o file2.o file3.o
然后-lmy用来链接.