Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用LLVM链接器生成C代码 我尝试用C++代码编写的C代码,代码如下:LLVM G++,使用以下命令: llvm-g++ -emit-llvm -c ./example.cpp -o example.o llc -march=c example.o_C++_C_Linker_Llvm - Fatal编程技术网

使用LLVM链接器生成C代码 我尝试用C++代码编写的C代码,代码如下:LLVM G++,使用以下命令: llvm-g++ -emit-llvm -c ./example.cpp -o example.o llc -march=c example.o

使用LLVM链接器生成C代码 我尝试用C++代码编写的C代码,代码如下:LLVM G++,使用以下命令: llvm-g++ -emit-llvm -c ./example.cpp -o example.o llc -march=c example.o,c++,c,linker,llvm,C++,C,Linker,Llvm,我在运行Ubuntu(Linux 3.16.0-45-generic)的机器上尝试了这些命令 但是,LLVM静态链接器没有将C代码写入标准输出,而是报告编译后的文件无效:错误:需要顶级实体 如何使用LLVM链接器生成C代码?如手册页所述: The llc command compiles LLVM source inputs into assembly language for a specified architecture. 它不会对一个对象文件进行反向工程来生成一个C文件(这就是您试图实

我在运行Ubuntu(Linux 3.16.0-45-generic)的机器上尝试了这些命令

但是,LLVM静态链接器没有将C代码写入标准输出,而是报告编译后的文件无效:
错误:需要顶级实体


如何使用LLVM链接器生成C代码?

如手册页所述:

The llc command compiles LLVM source inputs
into assembly language for a specified architecture.
它不会对一个对象文件进行反向工程来生成一个C文件(这就是您试图实现的),这对我来说没有什么意义

要了解支持哪种体系结构(大致指哪种CPU),您可以使用:

 llc -version
(您会注意到“C”不是一个体系结构)


<>如果你试图重写C++代码,最好是手动完成。你需要重写C中所有C++特定的东西(类、异常、模板、……),这取决于C++代码的复杂性,这将花费多少时间。

< P>不幸的是,在Ubuntu系统上发射LLVM位代码可能会有点痛苦,因为它们将DragonEgg作为默认前端——参见和./P> 如果对上面生成的文件执行
文件example.o
,您将看到它实际上不是LLVM IR位码(这解释了错误):

在Ubuntu系统上获取LLVM IR位码的最简单方法是使用clang:

$ clang -emit-llvm -c example.cpp -o example.o
$ file example.o
example.o: LLVM IR bitcode
也就是说,在LLVM3.1中删除了C后端(请参阅和)。正如您从
llc-version
的输出中所看到的,它没有列出,尝试使用它会在我的Ubuntu 14.04系统上出现以下错误:

llc-3.4: error: invalid target 'c'.

原始的C后端(llvm cbe)在3.1()中被删除,但是有一个Julia项目,它将其重新启动。

OP希望将llvm IR位代码转换为C(请注意
-emit llvm
选项,它应该生成位代码而不是对象文件)。它在早期版本中受支持(参见,例如),但在3.1()中删除了C后端。
llc-3.4: error: invalid target 'c'.