I need to run a program that uses ftd2xx on my BeagleBoard xM rev C running Ubuntu 12.04. I am trying to use the ARM library libftd2xx.so provided here. libFTDI is not an option.
The difference that I noticed comes from running readelf -hA
on libftd2xx.so vs other libraries on the BeagleBoard that work. The arch-specific section gives OS name as "ARM926EF-S" for ftd2xx instead of "7-A" for other libraries and CPU_arch as "v5TEJ" instead of "v7".
I'm assuming this means that the library is meant for the ARM v5 instruction set, and the BeagleBoard is running ARM v7. Is there some way to get ftd2xx to work?
Edit: I've been told ARM7 is backward compatible with ARM5, but that does not solve my problem.
Another thing to note is that running ldd libftd2xx.so
on the BeagleBoard does not list the dependencies, but prints out not a dynamic executable
, whereas it works on other libraries.
EDIT 2:
The issue seems to be with a soft vs hard float ABI. I have a gnueabihf image on the BeagleBoard xM. When I try to compile an example program with the static libftd2xx.a, I get many of these:
/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)
If I try to compile with mfloat-abi=soft
or mfloatabi=softfp
, I get
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
I also tried to cross compile with arm-linux-gnueabi
instead of arm-linux-gnueabihf
, but the resulting program does not execute on the BeagleBoard. Is there anything I can do or is it impossible?
--------- SOLUTION ----------------
After some trouble, FTDI provided me with a hard float version of their library which works. I am providing it here after many people have individually requested it:
https://s3.amazonaws.com/hayk-public/arm926-hf.zip
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…