将多个 C 源文件编译成一个唯一的目标文件

标签 c gcc linker

我有一些 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 编译所有文件以返回一个目标文件(我还想指定它的名称)?谢谢。

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

最佳答案

您不能将多个源文件编译成一个目标文件。目标文件是单个源文件及其 header (也称为 translation unit )的编译结果。

如果要合并编译后的文件,一般使用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

关于将多个 C 源文件编译成一个唯一的目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182176/

相关文章:

.net - 用于分析可执行文件的库

用 C 代码创建 GPA 计算器

c - 如何在 C 中的 8 皇后程序的二维数组上放置一个字符

c - 使用gdb查找memcpy错误

macos - OpenMP 是否可以在 Qt spanwed 线程上运行?

C++ 链接器错误 undefined reference to `Suma(int, int)' ld returned 1 exit status

c++ - 这个LNK2005怎么解释?

c - 从结构内的链接列表导出数据

c++ - 原始双类型比较的 GCC 问题

linux - 动态链接尝试全部产生静态链接的二进制文件?为什么?