如何在没有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文件?的主要内容,如果未能解决你的问题,请参考以下文章