LLVM:如何交叉编译C ++程序

Chao Yan

我试图使用LLVM编译C ++源代码来准备二进制文件。这是一个例子:

//hello.cpp
#include <iostream>
int main() {
    std::cout << "Hello World!\n" << std::endl;
    return 0;
}

我使用以下命令:

clang++ -emit-llvm -c hello.cpp -o hello.bc
llc -march=arm hello.bc -o hello.s // I do need this step for running some backend optimizations 
arm-none-linux-gnueabi-g++ -static hello.s -o hello.exe

到目前为止,没有警告或错误。然后,我尝试使用qemu-arm和gem5模拟器运行“ hello.exe”,两者均因分段错误而崩溃:

qemu-arm的输出:

qemu-arm hello.exe
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault (core dumped)

输出形式gem5:

~/gem5/build/ARM/gem5.opt ~/gem5/configs/example/se.py -c ./hello.exe
**** REAL SIMULATION ****
info: Entering event queue @ 0.  Starting simulation...
panic: Page table fault when accessing virtual address 0xfffffff4
@ tick 2035000
[invoke:build/ARM/sim/faults.cc, line 70]
Memory Usage: 646432 KBytes
Program aborted at cycle 2035000
Aborted (core dumped)

我正在使用clang版本3.7.0svn。我有什么想念的吗?实际上,编译过程已用于多个c程序,并且它们都正常工作。但不适用于c ++程序。

安东·科罗贝尼科夫(Anton Korobeynikov)

这不会以这种方式起作用。实际上,LLVM IR并不是非特定目标,因此将x86 IR编译为ARM是行不通的:ABI不同,等等。

您需要使用clang的-target选项(或将clang作为指定默认目标的交叉编译器来构建)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 libpcap 库为 OpenWRT 交叉编译 C 程序?

如何为ARM交叉编译Hello World C程序

如何编译包含LLVM API标头的C ++程序?

交叉编译c / c ++ / cuda程序时尝试使用CMake

如何在Windows 10上交叉编译Go程序

如何在Mac版Ubuntu上交叉编译Go程序?

如何使用GDB调试交叉编译的QEMU程序?

如何使用gcc交叉编译Raspberry Pi的程序?

如何使用 CMake 交叉编译 qt 应用程序

错误:无法运行C编译程序。如果您打算交叉编译使用--host'Ubuntu

不能用mingw交叉编译opengl程序

helloworld程序的交叉编译错误

无法在 Linux 上交叉编译 iOS 程序

如何使用GStreamer编译C / C ++程序

使用SQL驱动程序交叉编译Go程序

将Haskell程序编译为LLVM IR

wxWidgets如何使用代码块从Linux交叉编译Windows应用程序?

如何将Mac OS X的Go程序交叉编译到Ubuntu 64位

如何在Raspberry pi 1模型B中交叉编译FreeBSD的go应用程序

如何从交叉编译的二进制文件生成程序集?

如何为Raspberry Pi交叉编译Qt Quick应用程序?

在Linux上交叉编译Windows应用程序时如何链接到Winsock?

如何为 Yocto Linux 交叉编译具有库依赖项的应用程序?

如何交叉编译A13 Olinuxino(armv5)板的Qt应用程序?

Linux X86_64系统中用于ARMv8-A的交叉编译C程序

从Linux到Windows交叉编译C ++应用程序的手册?

cmake不会使用pthreads构建Linux c ++ 11交叉编译程序

交叉编译适用于ARM的MongoDB C ++驱动程序。找不到Boost库

如何修复和编译此C ++程序