我尝试llvm-g++使用以下命令从编译的 C++ 代码生成 C 代码:
llvm-g++ -emit-llvm -c ./example.cpp -o example.o
llc -march=c example.o
Run Code Online (Sandbox Code Playgroud)
我在运行Ubuntu (Linux 3.16.0-45-generic).
但是,LLVM 静态链接器并没有将 C 代码写入标准输出,而是报告编译后的文件无效:error: expected top-level entity.
如何使用 LLVM 链接器生成 C 代码?
不幸的是,在 Ubuntu 系统上发出 LLVM 位代码可能有点痛苦,因为它们将 DragonEgg 作为默认前端发送 - 请参阅此问题和此错误报告。
如果您file example.o对上面生成的文件执行 a操作,您会发现它实际上不是 LLVM IR 位码(它解释了错误):
$ file example.o
example.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
Run Code Online (Sandbox Code Playgroud)
在 Ubuntu 系统上获取 LLVM IR 位码的最简单方法是使用 clang:
$ clang -emit-llvm -c example.cpp -o example.o
$ file example.o
example.o: LLVM IR bitcode
Run Code Online (Sandbox Code Playgroud)
也就是说,在 LLVM 3.1 中删除了 C 后端(请参阅发行说明和这个问题)。正如您从llc -version它的输出中看到的那样,它未列出,尝试使用它在我的 Ubuntu 14.04 系统上出现以下错误:
llc-3.4: error: invalid target 'c'.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |