我使用gcc 4.8.2的Ubuntu 12.01并对运行旧的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
好吧,正如here所指出的,我认为我需要为给定的架构构建整个工具链,但我真的很困惑如何做到这一点:
A)我正在使用Ubuntu 12.01,它是为i686架构而构建的。我要在这个Ubuntu中构建新的工具链吗?我应该使用较旧的Ubuntu构建一个VM并编译它(这对我来说是一个问题,因为我需要C ++ 00x -C11支持,而Ubuntu就像10.X gcc不支持它)。
b)我无法构建目标硬件,因为它只有很少的内存和磁盘(256Mb RAM)和非常老的Linux内核2.6.23。
我真的很困惑如何解决这个问题,并且对此表示感谢。 here
答案 0 :(得分:0)
这是因为您的libstdc ++链接为与vortex平台不兼容的i686版本。当您切换到动态链接(默认情况下启用)时,您的示例将完美运行。