Armadilloフォーラム

libusbのエラーについて

k.nishijo

2018年5月18日 15時01分

西條と申します。

libusb をつかったアプリケーションをarmadilloに転送して実行しようとしたところ下記エラーが発生しました。

推測される要因と対応策がわかりましたご教示ください。

/XXXXXX: error while loading shared libraries: libusb-1.0.so.0: cannot open shared object file: No such file or directory

コメント

メッセージのまま、libusbが無いという意味です。

Atmark Distのmakefileはユーザーの作成したアプリケーション含め、
実行形式のバイナリが依存するライブラリ(この場合libusb)を探索して
ユーザーランドイメージにコピーする機能があります。
組み込み方のガイドラインは製品マニュアルの下記の章になります。
https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…

こちらのスレッドも参考になるかと思います。
https://armadillo.atmark-techno.com/forum/armadillo/763

上記のように恒久的にユーザーランドにlibusbを配置するのではなく、
一時的に試すだけであれば、次の手順で可能だと思います。

1. ATDE5から /usr/arm-linux-gnueabihf/lib/libusb-1.0.so.0 をArmadilloに転送
2. libusbを転送したパスを/rootと仮定して下記のようにアプリケーションhogeを実行
LD_LIBRARY_PATH=/root ./hoge

Atmark DistではなくArmadilloでDebianユーザーランドを使っている場合は
aptでライブラリをインストールすることができます。
[Armadillo]# apt-get install libusb-1.0-0

> メッセージのまま、libusbが無いという意味です。
>
> Atmark Distのmakefileはユーザーの作成したアプリケーション含め、
> 実行形式のバイナリが依存するライブラリ(この場合libusb)を探索して
> ユーザーランドイメージにコピーする機能があります。
> 組み込み方のガイドラインは製品マニュアルの下記の章になります。
> https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…
>
> こちらのスレッドも参考になるかと思います。
> https://armadillo.atmark-techno.com/forum/armadillo/763
>
> 上記のように恒久的にユーザーランドにlibusbを配置するのではなく、
> 一時的に試すだけであれば、次の手順で可能だと思います。
>
> 1. ATDE5から /usr/arm-linux-gnueabihf/lib/libusb-1.0.so.0 をArmadilloに転送
> 2. libusbを転送したパスを/rootと仮定して下記のようにアプリケーションhogeを実行
> LD_LIBRARY_PATH=/root ./hoge
>
> Atmark DistではなくArmadilloでDebianユーザーランドを使っている場合は
> aptでライブラリをインストールすることができます。
> [Armadillo]# apt-get install libusb-1.0-0

apt-get install libusb-1.0-0を試してみましたが、
以下メッセージが出力されてしまいます。

>[root@armadillo840-0 (ttySC2) ~]# apt-get install libusb-1.0-0
>-ash: apt-get: not found

> 以下メッセージが出力されてしまいます。
>
> >[root@armadillo840-0 (ttySC2) ~]# apt-get install libusb-1.0-0
> >-ash: apt-get: not found

それは、DebianではなくAtmark Distによるユーザーランドです。

> Atmark DistではなくArmadilloでDebianユーザーランドを使っている場合は
に該当しません。

Atmark DistとDebianユーザーランドの説明は
製品マニュアル 3.4. ソフトウェア構成に少し説明しております。

https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…

Debianユーザーランドの使い方は製品マニュアルの
16.2.2. Debian GNU/Linuxのルートファイルシステムを構築する を参照してください。
https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…

Armadillo-840のDebianユーザーランドはあくまで開発用です。
SDカードをメインのユーザーランドに使うため、長期運用には適しません。
前述の私のレスのうち、前半のAtmark Distを使う方法をお勧めします。

> 組み込み方のガイドラインは製品マニュアルの下記の章になります。
> https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…

上記手順に従ってイメージを作成すればその際に、アプリケーションが利用しているlibusubもarmadillog側にコピーされるという理解でよろしいのでしょうか?

> 上記手順に従ってイメージを作成すればその際に、アプリケーションが利用しているlibusubもarmadillog側にコピーされるという理解でよろしいのでしょうか?
>

その通りです。正確にはarmadillo側というよりromfs.img.gzにコピーされます。

実行されるタイミングは make romfs です。
このとき、
dist/vendors/AtmarkTechno/Common/tools/lib-inst.shdist/vendors/AtmarkTechno/Common/tools/lib-inst.sh
が自動的に圧縮前のromfsディレクトリ内のファイルを探索して実行ファイルを見付けると
実行ファイルをobjdumpし、その結果を元に依存するライブラリのコピーを実施します。

今回は関係ありませんが、dlopen()によるdymamic loadの場合は、
この判定ができないので自動的には組込まれません。

動作確認できました。
ありがとうございました。

> > 上記手順に従ってイメージを作成すればその際に、アプリケーションが利用しているlibusubもarmadillog側にコピーされるという理解でよろしいのでしょうか?
> >
>
> その通りです。正確にはarmadillo側というよりromfs.img.gzにコピーされます。
>
> 実行されるタイミングは make romfs です。
> このとき、
> dist/vendors/AtmarkTechno/Common/tools/lib-inst.shdist/vendors/AtmarkTechno/Common/tools/lib-inst.sh
> が自動的に圧縮前のromfsディレクトリ内のファイルを探索して実行ファイルを見付けると
> 実行ファイルをobjdumpし、その結果を元に依存するライブラリのコピーを実施します。
>
>
> 今回は関係ありませんが、dlopen()によるdymamic loadの場合は、
> この判定ができないので自動的には組込まれません。
>