仅限C ++前端编译器(将C ++转换为C)

我目前正在管理从单个源代码树(Win32,Linux,Verifone CC终端,MBED甚至Nintendo GBA / DS)在多个平台上运行的一些C ++代码。 但是,我需要构建一个针对没有C ++编译器(仅限C)的嵌入式平台的应用程序。 我重申许多早期的C ++编译器只是在现有C编译器(例如Glockenspiel使用MSC)上的前端。 今天使用的任何这样的“前端”C ++编译器是否会生成C代码。

Tools Platform ----------- ------------ ______Visual C++ _____ WIN32 / /_______MBED (ARM)_______MBED (ARM dev board). / /_________GCC (x86)________Linux / Source____/___________GCC (ARM)________GBA/DS \ \__________SDA______________Verifone Verix CC Terminals \ \________ARM SDT__________Verifine VerixV CC terminals \ \______????_____________Renases M8/16/32. \ \____????_____________Z8 family. 

最后两个平台我有很好的C编译器,但没有C ++。

正如您所看到的,我支持各种各样的平台,并且共享大量的库代码(以及一些应用程序代码)。

如果你使用LLVM , llvm-g++会将你的C ++代码编译为LLVM bitcode,而llc有一个后端,它将bitcode转换为C.

您可以编写如下命令:

 llvm-g++ -emit-llvm -c foo.cpp -o foo.o llc -march=c foo.c 

Comeau C ++就是这么做的。

无法使用Z8,但瑞萨M16C / M32C系列目前有GCC – 请参阅http://www.kpitgnutools.com/,了解在Windows上托管的预建交叉工具链。 我自己还没有使用它,但可能是比第三方C ++前端更好的选择,特别是因为你的代码已经在其他平台上以GCC为目标。

Comeau C ++生成C作为其输出,他们似乎很乐意将它移植到不同的后端编译器,虽然我不确定它的确切定价。

如果您想要更多的“自己动手”方法,可以购买EDG C ++编译器的许可证。 它通常用作前端(例如,通过Comeau和Intel),但我相信它的出货时,它包含一个代码生成器,它产生C作为输出。 它的许可更多地面向编译器供应商,因此许可证为您提供了很多权利,但是相当昂贵。

过时了,但也许你想尝试cfront ?

我将留下这些信息 – cfront没有exception支持。

根据我的理解,对于r8c / m16c / r32c,gcc中的c ++支持还不够成熟,对于生产代码来说已经足够了。 但是对于r8c / m16c / m32c / r32c,至少有一个编译器支持嵌入式C ++,那就是IAR,我认为Tasking还支持m16c上的嵌入式C ++。

请注意,有效的解决方案适用于llvm 1.3 llvm,最后一个版本是6.0.0,所以它根本不起作用。 (我发布这个是因为我已经尝试了这篇文章的解决方案,但它不再起作用了)(也许我已经做了坏事)

在我的测试中, llc不再接受 -march = c选项。 回到1.3是不可能的。 所以尽量小心版本。