关于c++代码/工具链构建的非法指令

Vortex86DX Illegal instruction on C++ code/toolchain build

本文关键字:构建 非法 指令 工具 c++ 代码 关于      更新时间:2023-10-16

我安装了Ubuntu 12.01和gcc 4.8.2,并在运行旧的2.6.23内核的Vortex86DX CPU上进行了交叉编译。

我正在尝试以下测试代码:

#include <iostream>
int main()
{
   std::cout << "Hello world" << std::endl;
}

使用以下命令行编译:

g++ -march=i586 test.cpp -o test586 -static -static-libgcc -static-libstdc++ 

当我在目标架构上运行test586时,我得到了这个错误:

$ ./test586
Illegal instruction

嗯,正如这里所指出的,我似乎需要为给定的体系结构构建整个工具链,但我真的很困惑如何做到这一点:

A)由于我目前使用的是Ubuntu 12.01,它是为i686架构构建的。我应该在这个Ubuntu中构建新的工具链吗?我是否应该用旧的Ubuntu构建一个VM并编译它(这对我来说是一个问题,因为我需要c++ 00x -C11支持,而Ubuntu喜欢10。

b)我不能在目标硬件中构建,因为它有很少的内存和磁盘(256Mb RAM)和一个非常旧的Linux内核2.6.23。

我真的很困惑如何解决这个问题,感谢帮助。

这是因为您的libstdc++链接为i686版本,与vortex平台不兼容。当你切换到动态链接(默认情况下是启用的),你的例子将完美地工作。