如何使用 GNU autotools 交叉编译 armv5tel?
How to cross-compile with GNU autotools for armv5tel?
我有一台 运行s 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;
}
这里有一些我已经知道的东西 tried/checked:
- 我已经检查了两台机器上的 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
我做错了什么?
显然我的交叉编译工具链不正确。
我最终使用了 crosstool-ng。顺便说一句,它使用起来非常简单,而且是一个很棒的工具,您所要做的就是为您的设备选择合适的工具链。
我用 crosstool-ng 构建了一个 arm-unknown-linux-uclibcgnueabi
工具链,它解决了我的问题。
我有一台 运行s 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;
}
这里有一些我已经知道的东西 tried/checked:
- 我已经检查了两台机器上的 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
我做错了什么?
显然我的交叉编译工具链不正确。 我最终使用了 crosstool-ng。顺便说一句,它使用起来非常简单,而且是一个很棒的工具,您所要做的就是为您的设备选择合适的工具链。
我用 crosstool-ng 构建了一个 arm-unknown-linux-uclibcgnueabi
工具链,它解决了我的问题。