2016-12-26 24 views
2

我有2个文件:编译多于一个C文件更进一个单一的非可执行对象文件

AC

BC

两者的他们没有主要功能。 如何编译并将它们链接到名为D.o的单个非可执行文件?

+0

您可以使用'#include' – 0x90

+0

创建第三个C源文件,其中包括和编译第三始终包含另一个C文件。可能比@ 0x90更好?或者创建一个lib。 –

+0

@ 0x90不,通常你不能(例如,如果两个文件对本地静态变量使用相同的名称,但也有其他情况)。 – yugr

回答

5

你可以先编译它们分开的目标文件,然后通过ld -r链接那些保留重定位信息:

ld -r tmp1.o tmp2.o -o tmp.o 
1

如果你想有一个非可执行文件,@yugr解决方案就好了。但是,如果根本不需要,那么这里是如何链接多个文件并创建单个对象文件。

GCC:
gcc -o d.o a.c b.c

注意-o用于指定目标文件的名称。

但是,如果你想做的更好,你应该看看makefile,并为每个源文件创建一个目标文件,然后将它们一起编译。

小例子:

exe: a.o b.o 
     gcc -o exe a.o b.o 

a.o: a.c 
     gcc -c a.c 

b.o: b.c 
     gcc -c b.c 
+1

这有什么关系? OP明确要求非可执行输出。 – yugr

+0

对不起,我没有看到它。 – UrbiJr

相关问题