Cara diketahui jika pustaka ARM (.so) kompatibel dengan raspberry PI


9

Saya memiliki perpustakaan yang dikompilasi (tanpa sumber) untuk driver sidik jari. Saya yakin ini adalah kompilasi ARM karena perintahnya file mylib.somengatakan:

Objek bersama ELF 32-bit LSB, ARM, versi 1 (SYSV), ditautkan secara dinamis, tidak dilucuti

tetapi jika saya ingin menggunakannya dalam program C ++ saya selalu memiliki kesalahan yang sama:

galat saat memuat pustaka bersama: mylib.so: tidak dapat membuka file objek bersama: Tidak ada file atau direktori tersebut

kesalahan ini seperti yang Anda lihat tidak terlalu eksplisit, tentu saja saya telah menggunakan perintah ekspor pada variabel LD_LIBRARY_PATH dengan jalur mylib.so.

jadi, Bagaimana mengetahui apakah pustaka ARM (.so) kompatibel dengan raspberry PI?

- Edit -

ldd libsgfdu03.so:
not a dynamic executable

ldd libsgfdu04.so:
not a dynamic executable

ldd libsgfpamx.so:
not a dynamic executable

Di SDK, dengan .so, saya punya sampel program C ++ untuk mengelola driver. Dengan dua perintah untuk dikompilasi dalam satu makefile:

g++ -I./ -I../include -c main.cpp -> termasuk satu file bernama "sgfplib.h"

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

Semua jalur baik dan tidak ada kesalahan yang dilaporkan pada waktu kompilasi, tetapi setelah lddpada executable akhir ldd sgfplibtest_fdu03mengatakan:

    /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)

- Edit driver yang sama dengan 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 yang sama (tetapi dikompilasi untuk x86) tampaknya tidak membutuhkan apa-apa lagi. Saya benar-benar tersesat ....


Mungkin tergantung pada sesuatu yang tidak diinstal. Jalankan ldd mylib.sodan lihat apa yang keluar
Lawrence

ldd mylib.so mengatakan "not a dynamic executable" :(
Gilles Grandguillaume

"bukan eksekusi dinamis" == Saya pikir Anda kurang beruntung. ldd adalah cara yang baik untuk mengatakannya. Perhatikan bahwa tidak hanya ada satu arsitektur ARM - pi adalah ARM11, alias. ARMv6, dan ada ARMv7 (Cortex) yang tidak kompatibel. Saya tidak tahu cara mudah untuk membedakan executable.
goldilocks

itu adalah driver reverse.the untuk ARM9, saya kira beberapa program untuk ARM9 kompatibel dengan ARM11. tetapi dalam kasus saya ... sepertinya tidak :(.
Gilles Grandguillaume

Jawaban:


4

Coba ldd foo.sodan lihat apakah ada keluaran yang masuk akal. Jika Anda mendapatkan "peringatan: Anda tidak memiliki izin eksekusi" itu karena file .so seharusnya dapat dieksekusi ;).

Di luar itu, saya tidak tahu apakah ada cara sederhana untuk memeriksa .so untuk kompatibilitas sistem, tapi saya ragu Anda akan mendapatkan kesalahan "Tidak ditemukan" - Saya pikir itu benar-benar tidak dapat menemukannya (saya juga berpikir ada adalah kesalahan "format file yang tidak dikenali" yang lebih tepat, dan pada kenyataannya linker mungkin tidak mengenali masalah seperti itu untuk memulai). Jadi hanya untuk memastikan kita berada di halaman yang sama dengan itu:

  • Buat symlink di direktori yang sama, ln -s foo.so libfoo.so.1- nanti adalah apa yang akan dicari.

  • Sekarang kompilasi program uji g++ -L/directory/path test.cpp -lfoo.

Apakah masih tertulis "Tidak ada file atau direktori"?

Output ldd WRT, jika Anda mendapatkan hal-hal seperti ini:

libsgfpamx.so => not found

Ini menunjukkan .so ditautkan ke .so lain yang tidak dapat ditemukan di lintasan pustaka dan karena itu kemungkinan tidak diinstal. Jika ada alasan untuk percaya ini adalah perpustakaan umum yang harus tersedia - mis. pthreads - Anda dapat mencari repositori raspbian untuk paket yang berisi file itu:

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

Sekarang kita tahu bahwa ada beberapa paket dengan nama file di dalamnya (libc6-dev, dan libc6: armhf). Tentu saja pthreads sudah terpasang. Kembali ke masalah Anda yang sebenarnya:

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

Sangat menyiratkan kita kurang beruntung WRT paket raspbian.

Pencarian online untuk "libsgfpamx.so" dan "sgfpamx" tidak menghasilkan ... apa-apa. Hampir pasti ini adalah hal-hal esoterik atau internal yang dibangun bersama mylib.so, dan jika Anda sudah memilikinya di suatu tempat Anda beruntung, jika tidak, Anda harus bertanya kepada orang-orang yang bertanggung jawab untuk "mylib.so".


saya telah mengedit pertanyaan saya.
Gilles Grandguillaume

@GillesGrandguillaume: Saya telah menambahkan jawaban saya sebagai balasan.
goldilocks

jadi saya tidak mengerti mengapa kode sampel yang sama berfungsi pada debian ... dengan respon yang sama dari perintah "dpkg -S libsgfpamx.so". Saya telah mengedit pertanyaan saya. maaf sudah buang-buang waktu
Gilles Grandguillaume

-2

Lib Libib adalah Libug Secugen. Anda harus mendapatkan SDK dan membangunnya kembali untuk platform Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.