如何在没有crt的情况下链接obj文件?

Posted

技术标签:

【中文标题】如何在没有crt的情况下链接obj文件?【英文标题】:How to link obj files without crt? 【发布时间】:2019-02-14 20:27:03 【问题描述】:

如何在没有 CRT 的情况下实现链接 2 .o 文件。

编译.c文件:

gcc -ffreestanding -c file.c -o file.o

链接:

gcc  file1.o file2.o -o f.o

标志 -nostartfiles 和 -nostdlib 对我没有帮助。

【问题讨论】:

您的“链接”不是用于生成目标文件的 gcc 命令行...您需要扩展您的问题以描述您想要的结果。另一个目标文件?静态库?共享对象?可执行文件? ELF 格式? a.out 格式? PE格式?原始二进制文件?然后通过你的尝试,描述实际发生的事情以及需要改变的地方。 可能是***.com/questions/2980102/… @BenVoigt 我只编译了 2 个 .c 文件,我想将它们链接到 1 个目标文件中。我正在编写一个操作系统,我想将我的内核与另一个包含一些函数的 C 文件链接,并且而不是将它与引导加载程序链接,但我的内核与 CTR 链接,因此它不能正常工作。 但是为什么你认为你需要中间合并的目标文件呢?您可以在最后的链接步骤中传递所有对象,即创建完全解析的可执行文件。如果您不想跟踪所有目标文件,那就是静态库的用途。 @BenVoigt 我需要通过将引导加载程序与内核链接的方式在最后获取 .bin 文件,但在此之前我需要从多个文件链接内核,在步骤中内核也与 CRT 链接,即不需要。 【参考方案1】:

我只是编译 2 个 .c 文件,我想将它们链接到 1 个目标文件中

ld -r -o f.o file1.o file2.o

【讨论】:

它只是将 2 个文件粘在一起而没有链接它们。在file1中,我从file2调用函数,但我得到8:8: e8 00 00 00 00 callq d <main+0xd>` “它只是把 2 个文件粘在一起”——这就是你所要求的。

以上是关于如何在没有crt的情况下链接obj文件?的主要内容,如果未能解决你的问题,请参考以下文章

在 ThreeJS 中缩放 OBJ 的一部分

链接学习之obj文件探索

ccs中,Debug文件夹中生成了obj文件,但是连接时找不到目标文件

在 Qt 中链接 obj 文件

OpenGL 将 VBO 保存到文件(Obj 或其他)

OBJ是啥意思?