是否可以直接使用LLVM-assembly?

fuz*_*fuz 12 llvm

我已经阅读了一些关于llvm的网页和文章,我对这个项目很感兴趣.(也许要学习一些关于编译器编写的东西,而不需要与x86的复杂点挣扎).

有些页面描述了如何编写llvm程序集以及如何组装它,但我没有找到任何关于实际执行这些环境所需的环境.我知道我可以在我的文件上运行llvm-gcc来获取可在C上下文中执行的目标文件.但是在我不想使用C运行时环境(libc.so和朋友)的情况下,运行llvm代码需要什么?那有什么文件吗?

Kur*_*man 10

似乎有一个LLVM汇编程序.

llvm-as LLVM汇编程序.它读取包含人类可读LLVM汇编语言的文件,将其转换为LLVM bitcode,并将结果写入文件或标准输出.

  • @FUZxxl,你的序列应该是`llvm-as foo.ll; llc --your-platform-options-blah-blah-blah foo.bc; ./ a.out` (5认同)
  • 或者通过`lli foo.bc`直接运行bitcode来使用JIT编译器. (4认同)

Mi *_*i G 7

快速设置:(对于 Windows 上的 llvm 3.4.0 .ll 文件)

来自https://notepad-plus-plus.org/ 的高级文本编辑器

来自https://github.com/CRogers/LLVM-Windows-Binaries 的llvm 二进制文件

hello.ll 为“没有 BOM 的 UTF-8”(此代码采用 llvm 3.4.0 格式):

@msg = internal constant [13 x i8] c"Hello World!\00"
declare i32 @puts(i8*)
define i32 @main() {
    call i32 @puts(i8* getelementptr inbounds ([13 x i8]* @msg, i32 0, i32 0))
    ret i32 0
}
Run Code Online (Sandbox Code Playgroud)

在命令提示符中:

lli hello.ll
Run Code Online (Sandbox Code Playgroud)

快速设置:(对于 Windows 上的 llvm 3.8.0 .ll 文件)

来自https://notepad-plus-plus.org/ 的高级文本编辑器

clang 二进制文件来自:http : //llvm.org/releases/download.html#3.8.0

hello.ll 为“无 BOM 的 UTF-8”(此代码采用 llvm 3.8.0 格式):

@msg = internal constant [13 x i8] c"Hello World!\00"
declare i32 @puts(i8*)
define i32 @main() {
    call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @msg, i32 0, i32 0))
    ret i32 0
}
Run Code Online (Sandbox Code Playgroud)

在命令提示符中:

clang hello.ll -o hello.exe
hello.exe
Run Code Online (Sandbox Code Playgroud)

或者作为单个命令:

clang hello.ll -o hello.exe & hello.exe
Run Code Online (Sandbox Code Playgroud)

关于 char16_t、u16String 等的错误意味着 clang 需要:-fms-compatibility-version=19