其他分享
首页 > 其他分享> > c – GCC交叉编译到i586架构(Vortex86DX)

c – GCC交叉编译到i586架构(Vortex86DX)

作者:互联网

我有Uccntu 12.01与gcc 4.8.2,并希望交叉编译运行旧的2.6.23内核的Vortex86DX CPU.

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

#include <iostream>

int main()
{
   std::cout << "Hello world" << std::endl;
}

这是使用以下命令行编译的:

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

当我在目标架构上运行test586时,我收到此错误:

$./test586
./teste586: symbol lookup error: ./test586: undefined symbol: _ZMSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE

关于这里发生了什么的任何想法?这只是一个小代码 – 真正的代码有大约10个不同的库,都是用C 11编写的.

事实上,Marco的评论是正确的.代码仍然需要一些动态库:

$ldd ./test586
linux-gate.so.1 =>  (0xb776b000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75a4000)
/lib/ld-linux.so.2 (0xb776e000)

我必须避免使用所有动态库,因为目标系统要么没有它们,要么具有非常旧的版本.

帮助赞赏实现这一目标.

解决方法:

我认为问题是命令开关的顺序,即链接器首先发现依赖项(libgcc,libstdc),然后才解析它们.
如果你在找到依赖项之前给它-static-libgcc,那么它就会忽略它.

以下为我工作:

$g++ -m32 -march=i586 test.cpp -o test586 -static -static-libgcc -static-libstdc++
$./test586 
Hello world
$ldd test586 
not a dynamic executable

标签:c,g,cross-compiling
来源: https://codeday.me/bug/20191002/1842799.html