【问题标题】:LLVM Cross Compiling to MIPS on Windows x64在 Windows x64 上将 LLVM 交叉编译为 MIPS
【发布时间】:2019-03-09 17:21:12
【问题描述】:

我正在尝试使用 llvm/clang 在 winx64 机器上将一个非常简单的 Hello World C 程序编译为 MIPS 程序集。

我已经搜索过这个问题,虽然有许多主题相似的主题,但它们几乎完全使用 linux,而且往往不提供任何形式的解决方案。

我的印象是,如果我获得最新的 LLVM 二进制文件并将其安装在我的 Windows 机器上,我将能够直接交叉编译 C 到 MIPS 程序集。 不是这样还是我错过了什么?

如果我针对 Windows 以外的任何对象,我会收到缺少头文件 stdio.h 的错误 设计的东西不正是为了做到这一点吗?将我的 C 代码转换为给定的目标 asm?

Windows 上似乎没有 Config.h,就像 linux 上一样,可以更改某些硬编码路径。

也许我完全误解了关于 llvm/clang 的一些东西。 希望任何人都可以帮助我指出解决这个问题的方向。

谢谢

【问题讨论】:

  • “我收到一个关于缺少头文件 stdio.h 的错误,这难道不是设计来做到这一点的吗?将我的 C 代码转换为给定的目标 asm 吗?” - 但如果你包含 stdio.h 那么你要求它做的不止这些:你要求它针对一个它找不到的 C 运行时库进行构建。我比 LLVM 更了解 GCC,但对于 GCC,您需要从目标系统中为其提供头文件和库,例如从 MIPS Linux 发行版中复制它们。 (而且它首先需要有这些来构建编译器。)但是 LLVM 可能不同。你将在哪里运行这个二进制文件?
  • LLVM 可以处理许多不同种类的交叉编译,但二进制文件并不是用所有这些来构建的。如果要交叉编译,通常必须从源代码构建。 (而且,正如@Rup 所说,您已经为目标而不是主机系统提供了头文件等。)
  • 感谢您的输入,现在图片更清晰了。我不是在尝试构建二进制文件,只是在模拟 mips 处理器上运行 mips 程序集。我将从 MIPS 中查找头文件并尝试将它们作为包含目录传递。
  • clang on Godbolt 适用于许多随机架构,例如 -target sparc64-target mips,就像我在 What exact rules in the C++ memory model prevent reordering before acquire operations? 上的回答中的 Godbolt 链接一样。 godbolt.org/z/zT2rkp。有时你会遇到头文件问题,但对于某些东西,如果你只是想看看编译器如何在 MIPS 或任何其他 ISA 上做某事,它会非常有用。

标签: c assembly llvm mips llvm-clang


【解决方案1】:

https://sites.google.com/site/lccretargetablecompiler/

https://github.com/drh/lcc

LCC 是一个在 windows 下运行的可重定向 C 编译器,可以输出 x86、Mips R3000、SPARC 或 ALPHA 处理器。

检查它以生成您的 mips 汇编代码。

或者看看 clang/llvm 编译器 https://llvm.org/docs/HowToCrossCompileLLVM.html

【讨论】:

    猜你喜欢
    • 2020-08-29
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2011-07-14
    • 2019-01-18
    • 2012-03-03
    相关资源
    最近更新 更多