Gcc 如何为armv5tel使用GNU自动工具进行交叉编译?

Gcc 如何为armv5tel使用GNU自动工具进行交叉编译?,gcc,segmentation-fault,arm,cross-compiling,autotools,Gcc,Segmentation Fault,Arm,Cross Compiling,Autotools,我有一台运行Linux(BusyBox)的ARM机器 我在我的Ubuntu 32位桌面上交叉编译了一个简单的程序: ./configure --host=arm-linux-gnueabi LDFLAGS="-static" make 但是当我试着在ARM机器上运行它时,它给了我分割错误 程序非常简单: #include <stdio.h> int main() { printf("Hello, World!"); return 0; } #包括 int ma

我有一台运行Linux(BusyBox)的ARM机器

我在我的Ubuntu 32位桌面上交叉编译了一个简单的程序:

./configure --host=arm-linux-gnueabi LDFLAGS="-static"
make
但是当我试着在ARM机器上运行它时,它给了我分割错误

程序非常简单:

#include <stdio.h>

int main()
{
    printf("Hello, World!");

    return 0;
}
#包括
int main()
{
printf(“你好,世界!”);
返回0;
}
以下是我已经尝试/检查过的一些事情:

  • 我检查了两台机器上的md5哈希,以消除通过网络复制可执行文件时出错的可能性
  • 使用arm linux gnueabi strip剥离可执行文件。我正在将我的可执行文件与目标计算机中已存在的另一个具有
    文件的可执行文件进行比较:
#归档我的程序

#我的#u程序:ELF 32位LSB可执行文件,ARM,版本1(SYSV),静态链接,适用于GNU/Linux 2.6.31,BuildID[sha1]=0x4b1f2773e54b141d5157b86f0f10438a372625c9,剥离

#将他们的程序归档

#他们的#u程序:ELF 32位LSB可执行文件,ARM,版本1(GNU/Linux),静态链接,剥离


我做错了什么?

显然,我的交叉编译工具链不是正确的。 我最终使用了。顺便说一句,它的使用非常简单,是一个很棒的工具,你所要做的就是为你的设备选择合适的工具链


我用crosstool ng构建了一个
arm未知linux uclibcgnueabi
工具链,解决了我的问题。

busybox和arm linux gnueabi。是否可能一个是uClibc,另一个是eglibc。现在,您还有softfp类型的ABI问题。armv5tel通常没有
fp
寄存器,因此我将指定,
-mfloat abi=soft
并选择“softfp”库。也许你的Ubuntu工具链不支持这个。在中,您可以找到一些可以使用
-nostartfiles-static-nostlib
编译的代码,任何工具链都可以生成使用这些技术运行的Linux二进制文件。@artlessnoise感谢uClibc的想法,这使我对其进行了研究并最终找到了解决方案
#include <stdio.h>

int main()
{
    printf("Hello, World!");

    return 0;
}