Tim*_*Tim 15 c++ cross-platform llvm
只是为了确定:LLVM bitcode是否跨平台?我的意思是,生成的IR(".bc")文件可以在各种平台上进行分解和解释/ JIT吗?
如果是这样,Clang如何将C++转换为平台独立代码?在C++语言本身中,用于确定其目标平台的预处理器在实际编译之前使用.
小智 19
LLVM IR可以是跨平台的,其他人列出的明显例外.但是,这并不意味着Clang会生成跨平台代码.如您所知,预处理器几乎普遍用于仅将部分代码传递给C/C++编译器,具体取决于平台.即使在用户代码中没有这样做,许多系统头文件也包含一些或两个特定于平台的头文件,例如typedefs.例如,如果您size_t在size_t32位平台上使用LLVM IR 编译C代码,那么LLVM IR现在就可以使用i32它,并且您无法对其进行反向工程来修复它.
谷歌的Portable Native Client项目(感谢@willglynn获取链接),如果我理解正确的话,可以通过修复所有目标平台的ABI来实现可移植性.因此,从这个意义上讲,它无法解决上述问题:LLVM IR无法移植到具有不同ABI的平台.这更便携的唯一原因是客户端提供了一个将PNaCl ABI与实际ABI相匹配的层.换句话说,PNaCl代码不能移植到许多平台,"PNaCl VM"就是.
所以,底线:如果你非常小心,你可以在多个平台上使用LLVM IR,但不是没有做大量的额外工作(Clang不这样做)来抽象ABI差异.
| 归档时间: |
|
| 查看次数: |
6169 次 |
| 最近记录: |