Ubuntu 12.04 を実行している BeagleBoard xM rev C で ftd2xx を使用するプログラムを実行する必要があります。here で提供されている ARM ライブラリ libftd2xx.so を使用しようとしています。libFTDI はオプションではありません。
私が気付いた違いはreadelf -hA
、libftd2xx.so で実行した場合と、BeagleBoard で動作する他のライブラリを実行した場合です。アーキテクチャ固有のセクションでは、OS 名を他のライブラリの「7-A」ではなく ftd2xx の「ARM926EF-S」として、CPU_arch を「v7」ではなく「v5TEJ」として指定します。
これは、ライブラリが ARM v5 命令セット用であり、BeagleBoard が ARM v7 を実行していることを意味していると思います。ftd2xx を動作させる方法はありますか?
編集: ARM7 には ARM5 との下位互換性があると言われましたが、それでも問題は解決しません。
注意すべきもう 1 つの点はldd libftd2xx.so
、BeagleBoard で実行すると、依存関係が一覧表示されず、出力されnot a dynamic executable
ますが、他のライブラリでは機能することです。
編集2:
この問題は、ソフト vs ハード フロート 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
ormfloatabi=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 は動作するライブラリのハード フロート バージョンを提供してくれました。多くの人が個別にリクエストした後、ここに提供します。