我需要在运行 Ubuntu 12.04 的 BeagleBoard xM rev C 上运行一个使用 ftd2xx 的程序。我正在尝试使用此处提供的 ARM 库 libftd2xx.so 。libFTDI 不是一个选项。
我注意到的差异来自于readelf -hA
在 libftd2xx.so 上运行与在 BeagleBoard 上运行的其他库。arch-specific 部分将 ftd2xx 的操作系统名称指定为“ARM926EF-S”,而不是其他库的“7-A”,并将 CPU_arch 指定为“v5TEJ”而不是“v7”。
我假设这意味着该库适用于 ARM v5 指令集,而 BeagleBoard 正在运行 ARM v7。有什么方法可以让 ftd2xx 工作吗?
编辑:有人告诉我 ARM7 向后兼容 ARM5,但这并不能解决我的问题。
另外需要注意的是,ldd libftd2xx.so
在 BeagleBoard 上运行不会列出依赖项,而是打印出来not a dynamic executable
,而在其他库上运行。
编辑2:
问题似乎出在软浮动 ABI 与硬浮动 ABI 上。我在 BeagleBoard xM 上有一个 gnueabihf 图像。当我尝试使用静态 libftd2xx.a 编译示例程序时,我得到了很多:
/usr/bin/ld: error: static_link_uses VFP register arguments, libftd2xx.a(file.o) does not
/usr/bin/ld: failed to merge target specific data of file libftd2xx.a(file.o)
如果我尝试使用mfloat-abi=soft
or编译mfloatabi=softfp
,我会得到
In file included from /usr/include/stdio.h:28:0,
from main.c:12:
/usr/include/features.h:324:26 fatal error: bits/predef.h: No such file or directory
compilation terminated
我还尝试使用arm-linux-gnueabi
而不是交叉编译arm-linux-gnueabihf
,但生成的程序不会在 BeagleBoard 上执行。有什么我能做的还是不可能的?
- - - - - 解决方案 - - - - - - - -
在遇到一些麻烦之后,FTDI 为我提供了他们的库的硬浮动版本,它可以工作。在许多人单独请求之后,我在这里提供它: