ARMライブラリ(.so)がラズベリーPIと互換性があるかどうかを知る方法


8

指紋ドライバー用のコンパイル済みライブラリー(ソースなし)があります。コマンドがfile mylib.so言うので、私はそれがARMコンパイルだと確信しています:

ELF 32ビットLSB共有オブジェクト、ARM、バージョン1(SYSV)、動的にリンクされ、ストリップされない

しかし、C ++プログラムでそれらを使用したい場合は、常に同じエラーが発生します。

共有ライブラリの読み込み中にエラーが発生しました:mylib.so:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません

このエラーは、あまり明確ではないようですが、もちろん変数lib_LIBRARY_PATHでmylib.soのパスを指定してexportコマンドを使用しました。

そう、ARMライブラリ(.so)がラズベリーPIと互換性があるかどうかを知る方法は?

-編集-

ldd libsgfdu03.so:
not a dynamic executable

ldd libsgfdu04.so:
not a dynamic executable

ldd libsgfpamx.so:
not a dynamic executable

SDKには、とともに.so、ドライバーを管理するためのサンプルC ++プログラムがあります。1つのmakefileでコンパイルするための2つのコマンド:

g++ -I./ -I../include -c main.cpp ->「sgfplib.h」という名前のファイルを1つ含めます

g++ /usr/lib/arm-linux-gnueabihf/libusb.so -lpthread -lsgfpamx -lsgfdu03 -lsgfplib -o ../bin/arm12/sgfplibtest_fdu03 main.o -L/home/pi/sdk/lib/arm12

すべてのパスは良好で、コンパイル時にエラーは報告されませんがldd、最終的な実行可能ファイルの後には次のように表示されますldd sgfplibtest_fdu03

    /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6f76000)
    libusb-0.1.so.4 => /lib/arm-linux-gnueabihf/libusb-0.1.so.4 (0xb6f5a000)
    libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6f3b000)
    libsgfpamx.so => not found
    libsgfdu04.so => not found
    libsgfplib.so => not found
    libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb6e6e000)
    libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6dfd000)
    libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6dd5000)
    libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6ca6000)
    /lib/ld-linux-armhf.so.3 (0xb6f83000)

-同じドライバをdebian x86で編集-

dpkg -S libsgfpamx.so 

dpkg-query: no path found matching pattern *libsgfpamx.so*

ldd sgfplibtest_fdu03 :

    linux-gate.so.1 =>  (0xb76eb000)
    libusb-0.1.so.4 => /lib/libusb-0.1.so.4 (0xb76d1000)
    libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb76b8000)
    libsgfpamx.so => /usr/local/lib/libsgfpamx.so (0xb769d000)
    libsgfdu03.so => /usr/local/lib/libsgfdu03.so (0xb7632000)
    libsgfplib.so => /usr/local/lib/libsgfplib.so (0xb7623000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7536000)
    libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7510000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb74f1000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb73aa000)
    /lib/ld-linux.so.2 (0xb76ec000)

同じexe(ただし、x86用にコンパイルされています)は、それ以上何も必要としないようです。全然迷ってる……。


インストールされていないものに依存している可能性があります。実行ldd mylib.soして何が出るかを見る
ローレンス

ldd mylib.soは「動的実行可能ファイルではありません」と言います:(
Gilles Grandguillaume

「動的実行可能ファイルではありません」==運が悪いと思います。 伝えるための良い方法。ARMアーキテクチャは1つしかないことに注意してください。piはARM11(別名)です。ARMv6、および互換性のないARMv7(Cortex)があります。ただし、実行可能ファイルを区別する簡単な方法はわかりません。ldd
ゴルディロックス

それは逆です。ドライバーはARM9用です。ARM9の一部のプログラムはARM11と互換性があると思います。しかし、私の場合は...ではないようです:(。
ジルGrandguillaume

回答:


4

ldd foo.so妥当な出力があるかどうかを試してみてください。「警告:実行権限がない」というメッセージが表示された場合は、.soファイルが実行可能であることが想定されているためです。

それを超えて、システムの互換性について.soを確認する簡単な方法があるかどうかはわかりませんが、「見つかりません」エラーが表示されることはないと思います-本当に見つけられないと思います(私もそこにいると思います)より適切な「ファイル形式が認識されない」エラーであり、実際にはリンカが最初にそのような問題を認識しない可能性があります)。だから私たちはそれと同じページにいることを確認するために:

  • 同じディレクトリにシンボリックリンクを作成します。後者はln -s foo.so libfoo.so.1ldが検索するものです。

  • 次に、テストプログラムをコンパイルしますg++ -L/directory/path test.cpp -lfoo

それでも「そのようなファイルまたはディレクトリはありません」と表示されますか?

WRT ldd出力、次のようなものを取得した場合:

libsgfpamx.so => not found

これは、.soが別の.soにリンクされており、ライブラリパスで見つからないため、インストールされていない可能性があることを示しています。これが利用可能な一般的なライブラリであると信じる理由がある場合-例えば pthreads-そのファイルを含むパッケージをraspbianリポジトリで検索できます:

> dpkg -S libpthread.so
libc6-dev:armhf: /usr/lib/arm-linux-gnueabihf/libpthread.so
libc6:armhf: /lib/arm-linux-gnueabihf/libpthread.so.0

これで、そのようなファイル名を持つパッケージがいくつかあることがわかりました(libc6-dev、およびlibc6:armhf)。もちろん、pthreadsはすでにインストールされています。あなたの実際の問題に戻る:

dpkg -S libsgfpamx.so
dpkg-query: no path found matching pattern *libsgfpamx.so*

raspbianパッケージのWRTがうまくいかなくなったことを強く示唆しています。

「libsgfpamx.so」および「sgfpamx」をオンラインで検索すると、何も返されません。ほぼ間違いなく、これらはとともに構築された難解なものまたは内部的なものmylib.soであり、すでにどこかにそれらを持っている場合は、運が良ければ、そうでなければ「mylib.so」の責任者に問い合わせる必要があります。


質問を編集しました。
Gilles Grandguillaume 2013

@GillesGrandguillaume:私は返信で私の​​答えの最後に追加しました。
ゴルディロックス

そのため、同じサンプルコードがdebianで機能する理由がわかりません...コマンド「dpkg -S libsgfpamx.so」の同じ応答で、私は私の質問を編集しました。あなたの時間を無駄にして申し訳ありません。
Gilles Grandguillaume 2013

-2

libsgライブラリはSecugenライブラリです。SDKを入手し、プラットフォームに合わせて再構築する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.