【发布时间】:2016-06-20 15:27:54
【问题描述】:
我尝试(使用我有限的 Linux 技能)为在 ARMv7 平台上运行的 Angstrom Linux 交叉编译 NTFS-3G 驱动程序。
我尝试了以下configure 认为它有效:
./configure --target=arm-angstrom-linux-gnueabihf --host=arm-angstrom-linux-gnueabi --prefix=/dev/build_ntfs
make
sudo make install
然后我将生成的安装复制到我的嵌入式平台的 rootfs 上,结果发现当我执行使用 NTFS-3G 构建的工具之一时,我收到以下错误:
ntfsls: cannot execute binary file: Exec format error
当我执行file ntfsls 时,它会返回:
ntfsls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24,
BuildID[sha1]=4eeb3c06c20046bedf70df6c774e32ddc89c097c, not stripped
现在很明显,当我完成配置后,它并没有在交叉编译器上得到响应。如果我在其他工具上尝试file,例如 minicom:
file minicom
结果是:
minicom: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically
linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32,
BuildID[sha1]=85d16f083bb06935bff73c248341a8d5fe22cdab, stripped
这显然是为 ARM 构建的。
我的问题是,我在哪一步未能针对 ARM 平台?
【问题讨论】:
-
也许可以尝试检查 configure.log 或 configure.status 文件,并尝试找出它选择了哪个编译器。配置标志没有任何效果会很奇怪,通常配置会失败。尝试使用
configure --foo=something看看它是否在未知标志上失败。 -
在
config.log中说:检查 arm-angstrom-linux-gnueabi-gcc 结果:否。在下一行它说:检查 gcc 发现:/usr/bin/gcc -
所以安装它。在 Ubuntu 上,只需在终端输入
arm-angstrom-linux-gnueabi-gcc,它就会告诉你它丢失了以及安装哪个包来获取它。 -
那你需要排查
checking for arm-angstrom-linux-gnueabi-gcc。在调试模式下运行配置文件 - stackoverflow.com/questions/951336/how-to-debug-a-bash-script。看看它是如何执行检查的。或者只是在文本编辑器中打开./configure脚本并搜索arm-angstrom-linux-gnueabi-gcc并从那里开始。 -
为了重现这一点,我刚刚下载了最新的 (2016.2.22) NTFS-3G 源代码,并使用方便的 Linaro arm-linux-gnueabihf 工具链交叉构建了它。即使主机和目标之间存在荒谬的不匹配,即使使用 WTF 前缀安装到 /dev/,我也无法阻止配置成功。因此,我只能得出结论,用技术术语来说,您的环境和/或工具链完全是胡扯;)
标签: linux arm cross-compiling