Saya memiliki perpustakaan yang dikompilasi (tanpa sumber) untuk driver sidik jari. Saya yakin ini adalah kompilasi ARM karena perintahnya file mylib.so
mengatakan:
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 ldd
pada executable akhir ldd sgfplibtest_fdu03
mengatakan:
/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 ....
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.
ldd mylib.so
dan lihat apa yang keluar