【问题标题】:Compile more than one C file into a single non executable object file [duplicate]将多个 C 文件编译为单个非可执行目标文件 [重复]
【发布时间】:2016-12-26 19:01:42
【问题描述】:

我有 2 个文件:

交流

B.c

它们都没有主函数。 如何将它们编译并链接到一个名为 D.o 的非可执行文件中?

【问题讨论】:

  • 你总是可以使用#include包含另一个c文件
  • 创建第三个包含两者的 c 源文件并编译第三个。可能比@0x90 更好?或者创建一个库。
  • @0x90 不,很多时候你不能(例如,如果两个文件对本地静态变量使用相同的名称,但还有其他情况)。
  • 永远是一个可以商量的条款 :)
  • 你的标题比副本的标题好,但你要求的是同样的东西,正确的答案基本上是一样的。

标签: c gcc compilation linker


【解决方案1】:

您可以先将它们编译为单独的目标文件,然后通过 ld -r 将它们与保留的可重定位信息链接:

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

【讨论】:

    【解决方案2】:

    如果你想要一个不可执行的文件,@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
    

    【讨论】:

    • 这有什么关系? OP 明确要求提供不可执行的输出。
    • 对不起,我没看到。
    猜你喜欢
    • 1970-01-01
    • 2016-06-27
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多