gpt4 book ai didi

windows - 如何从 LLVM ir 创建可执行文件?

转载 作者:可可西里 更新时间:2023-11-01 14:22:28 32 4
gpt4 key购买 nike

我目前正在使用 llc使用命令行将 .ll 文件转换为 .s。然后我想拿这个文件然后使用 nasm从中创建可执行文件。虽然第一步似乎工作正常,但我无法让第二步工作。


原始文件名为code.ll,包含以下代码:

define i32 @main() {
ret i32 0
}

现在我使用 cmd 通过键入以下内容来构建 .s 文件:

llc code.ll

这工作正常并创建一个包含以下代码的 code.s 文件:

    .def     @feat.00;
.scl 3;
.type 0;
.endef
.globl @feat.00
@feat.00 = 1
.def _main;
.scl 2;
.type 32;
.endef
.text
.globl _main
.align 16, 0x90
_main: # @main
# BB#0:
xorl %eax, %eax
ret

现在我想使用这段代码创建一个可执行文件,关于它 llc doc告诉我这个:

The assembly language output can then be passed through a native assembler and linker to generate a native executable.

所以我使用nasm (据我所知应该做我想做的)输入:

nasm code.s

产生以下错误列表:

code.s:1: error: attempt to define a local label before any non-local labels
code.s:1: error: parser: instruction expected
code.s:2: error: attempt to define a local label before any non-local labels
code.s:2: error: parser: instruction expected
code.s:3: error: attempt to define a local label before any non-local labels
code.s:3: error: parser: instruction expected
code.s:4: error: attempt to define a local label before any non-local labels
code.s:5: error: attempt to define a local label before any non-local labels
code.s:5: error: parser: instruction expected
code.s:6: error: parser: instruction expected
code.s:7: error: parser: instruction expected
code.s:8: error: parser: instruction expected
code.s:9: error: parser: instruction expected
code.s:12: error: parser: instruction expected
code.s:13: error: parser: instruction expected
code.s:14: error: parser: instruction expected
BB#0::1: error: parser: instruction expected
BB#0::2: error: parser: instruction expected
BB#0::3: error: parser: instruction expected
BB#0::4: error: parser: instruction expected
BB#0::5: error: parser: instruction expected
BB#0::8: error: parser: instruction expected
BB#0::9: error: parser: instruction expected
BB#0::10: error: parser: instruction expected

由于我对 LLVM 或汇编程序的经验接近于零,因此我无法自己解决这个问题。

如果我遗漏了一些重要的东西,请告诉我,我会尽快编辑我的答案。

最佳答案

感谢@Michael Petch的评论和 @Ross Ridge我终于明白了为什么这行不通并找到了可行的替代方案。


问题原因

汇编语言有多种,语法各不相同,不能直接兼容。作为nasm期待另一种汇编语言而不是 llc正在生产,它显然不起作用,这解释了长长的错误列表。

如何做到这一点

考虑到 llc有 AT&T 汇编程序作为输出,它是为 GNU toolchain 创建的, 最明显的步骤是使用 GCC使用 llc 构建 code.s 文件后创建可执行文件.

安装GCC我下载了MinGW , 安装并调用

mingw-get install gcc

现在我可以访问 GCC可用于通过调用

创建 code.exe

gcc code.s -o code.exe

gcc [文件名] -o [创建的可执行文件的名称]


由于这个解决方案可能比它需要的更复杂,我很高兴看到一些替代方案/改进。

关于windows - 如何从 LLVM ir 创建可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45985953/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com