gpt4 book ai didi

c++ - LLVM 位码跨平台

转载 作者:IT老高 更新时间:2023-10-28 22:25:17 26 4
gpt4 key购买 nike

只是为了确定:LLVM 位码是跨平台的吗?我的意思是,生成的 IR(“.bc”)文件可以在各种平台上分发和解释/JITed 吗?

如果是这样,Clang 如何将 C++ 转换为平台无关代码?而在 C++ 语言本身中,会在实际编译之前使用预处理器来确定其目标平台。

最佳答案

LLVM IR 可以是跨平台的,除了其他人列出的明显异常(exception)。但是,这并不意味着 Clang 会生成跨平台代码。正如您所注意到的,预处理器几乎普遍用于仅将部分代码传递给 C/C++ 编译器,具体取决于平台。即使在用户代码中没有这样做,许多系统头文件也包含一两个平台特定的,例如 typedefs。例如,如果您在 size_t 为 32 位的平台上使用 size_t 将 C 代码编译为 LLVM IR,则 LLVM IR 现在使用 i32那个,而且你没有办法通过逆向工程来修复它。

Google 的 Portable Native Client项目(感谢@willglynn 提供链接),如果我理解正确,通过修复所有目标平台的 ABI 来实现可移植性。所以从这个意义上说,它并没有解决上述问题:LLVM IR 不能移植到具有不同 ABI 的平台上。这更便携的唯一原因是客户端提供了一个将 PNaCl ABI 与实际 ABI 匹配的层。换句话说,PNaCl 代码不能移植到许多平台,“PNaCl VM”可以。

因此,底线:如果您非常小心,您可以在多个平台上使用 LLVM IR,但必须做大量额外工作(Clang 不会做)来抽象 ABI 差异。

关于c++ - LLVM 位码跨平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14258194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com