代码之家  ›  专栏  ›  技术社区  ›  August Karlstrom

如何使GCC生成ELF对象文件?

  •  0
  • August Karlstrom  · 技术社区  · 6 年前

    我需要使用TCC编译器来链接GCC生成的对象文件。但是,MinGW中的GCC以COFF格式输出对象文件,TCC只支持ELF格式。如何使GCC生成ELF对象文件?

    $ cat test.c
    int main(void)
    {
            return 0;
    }
    $ gcc -c test.c
    $ file test.o
    test.o: MS Windows COFF Intel 80386 object file
    $ tcc -c test.c
    $ file test.o
    test.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   DevSolar    6 年前

    交叉编译 ,这是一个有点复杂的主题——因为要创建完整的可执行文件 需要各种库:标准库、目标操作系统库、第三方库。。。因此,这不仅是“如何让编译器创建ELF”的主题,而且是“如何获得ELF libs的整个支持类型,以便我可以链接到它们?”。

    OSDev 有很多关于设置交叉编译器的文档;但是,因为您没有告诉我们 问题 很难再给你进一步的建议了。

    Linux系统 二进制文件,我的建议是不要麻烦交叉编译(它 一个棘手的问题——而且更好地支持另一种方式,即。 targeting Windows from Linux ),而是安装一个与Windows并行的Linux发行版,并在本地使用它。

        2
  •  1
  •   Brian Tiffin    6 年前

    strip 接受输入和输出类型(bfdname)的各种对象文件格式。 strip --info 对于支持的格式。

    strip -o outputname -O elf32-i386 objfile 在64位可执行文件上这样做,转换为32位控制头只会导致崩溃,所以请仔细选择输出表单。确保不更改假定的比特宽度/尾数以及头。

    不是明明跑,所以, 未试验过 ,可能无法满足您的需要,或者更糟的是,可能会跳楼起火。

        3
  •  1
  •   Employed Russian    6 年前

    GCC可以是 已配置 ELF ) 不管 它运行在哪个主机上。

    COFF ,并且可以将运行在Windows上的GCC配置为生成 ELF32 ELF64 ,用于各种处理器(例如。 x86 ,或 SPARC MIPS ).

    在一种主机上运行但为另一种主机生成代码的编译器称为交叉编译器。

    这不是一个有意义的语句:它可能意味着您希望GCC生成 ELF32 for i686 Linux ELF64 for SPARC Solaris

    你应该弄清楚 目标

    file test.o
    test.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

    好吧,你想让Windows Linux/i386/ELF32 交叉编译器。