【问题标题】:How to cross-compile with GNU autotools for armv5tel?如何使用用于 armv5tel 的 GNU 自动工具进行交叉编译?
【发布时间】:2015-04-20 08:49:47
【问题描述】:

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

# uname -a
# Linux XXXXXXXX 2.6.28 #1 PREEMPT Fri Sep 26 22:47:38 UTC 2014 armv5tel GNU/Linux

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

./configure --host=arm-linux-gnueabi LDFLAGS="-static"
make

但是当我尝试在 ARM 机器上运行它时,它给了我 Segmentation Fault 错误。

程序超级简单:

#include <stdio.h>

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

    return 0;
}

以下是我已经尝试/检查过的一些事情:

  • 我已经检查了两台机器上的 md5 哈希值,以消除通过网络复制可执行文件时出现问题的可能性
  • 使用arm-linux-gnueabi-strip 剥离可执行文件。我正在将我的可执行文件与另一个已经在目标机器中的可执行文件与file 进行比较:

# file my_program

# my_program: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.31, BuildID[sha1]=0x4b1f2773e54b141d5157b86f0f10438a372625c9, stripped

# file their_program

# their_program: ELF 32-bit LSB executable, ARM, version 1 (GNU/Linux), statically linked, stripped

我做错了什么?

【问题讨论】:

  • busybox 和 arm-linux-gnueabi。是否有可能一个是 uClibc 而另一个是 eglibc。现在,您还遇到了 softfp 类型的 ABI 问题。 armv5tel 通常没有 fp 寄存器,所以我会指定 -mfloat-abi=soft 并选择“softfp”库。可能您拥有的 Ubuntu 工具链不支持此功能。在this question on thumb entry,您可以找到一些可以用-nostartfiles -static -nostdlib 编译的代码,任何工具链都可以生成使用这些技术运行的Linux 二进制文件。
  • @artlessnoise 感谢 uClibc 的想法,这让我研究它并最终找出解决方案

标签: gcc segmentation-fault arm cross-compiling autotools


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-05-19
    • 2016-03-16
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多