【问题标题】:Cross Compiling NTFS-3G交叉编译 NTFS-3G
【发布时间】: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


【解决方案1】:

可能值得检查您是否正确输入了命令 - 特别是查看 "--host=arm-angstrom-linux-gnueabi" - 应该是 "--host =arm-angstrom-linux-gnueabihf"(请注意末尾的“hf”为支持硬件浮点的 ARM 芯片编译)?

只是为了验证我已经尝试过这个命令

glen@gw2:~/tmp/ntfs-3g_ntfsprogs-2016.2.22$ ./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --prefix=$HOME/tmp/test

完美运行并创建了 ARM 二进制文件:

glen@gw2:~/tmp/ntfs-3g_ntfsprogs-2016.2.22$ file ../test/lib/libntfs-3g.so.87.0.0
 ../test/lib/libntfs-3g.so.87.0.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=334b6214d2d68655d9dfd3bc518da927d9f1fa01, not stripped

如果您无法让 Ångström 编译器工作 - 不妨试试其他 ARM 编译器之一?

【讨论】:

  • 我很确定在这种情况下目标被忽略了——我什至尝试了完全不可能的--host=arm-linux-gnueabihf --target=aarch64-linux-gnu,但它仍然毫无怨言地生成了 ARMv7 二进制文件....
  • 是的,你是对的 - 我刚刚检查过没有指定任何“--target”,它仍然可以正常工作,所以为什么 weblar83 遇到问题仍然是个谜!
  • 看起来好像它没有在 sysroot 上使用,因为 arm-angstrom-linux-gnueabi 工具链没有内置 sysroot 支持。我将尝试其他编译器之一。干杯
  • 我按照平台制造商的建议尝试了 gcc-linaro 工具链,但是,在“make install”阶段之前,它都可以成功运行 - 每次都无法构建所有软件包。然后我下载了 arm-linux-gnueabihf 编译器,一切都运行良好——还没有在我的目标硬件上尝试过这些包,但一切看起来都很好。
猜你喜欢
  • 2011-03-13
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多