Eu tenho uma biblioteca compilada (sem fonte) para um driver de impressão digital. Tenho certeza de que é uma compilação do ARM porque o comando file mylib.so
diz:
Objeto compartilhado ELF de 32 bits LSF, ARM, versão 1 (SYSV), vinculado dinamicamente, sem remoção
mas se eu quiser usá-los em um programa C ++, sempre tenho o mesmo erro:
erro ao carregar bibliotecas compartilhadas: mylib.so: não é possível abrir o arquivo de objeto compartilhado: Esse arquivo ou diretório não existe
esse erro, como você vê, não é muito explícito, é claro que usei o comando export na variável LD_LIBRARY_PATH com o caminho do mylib.so.
Então, como saber se uma biblioteca ARM (.so) é compatível com o PI de framboesa?
- Editar -
ldd libsgfdu03.so:
not a dynamic executable
ldd libsgfdu04.so:
not a dynamic executable
ldd libsgfpamx.so:
not a dynamic executable
No SDK, com o .so
, eu tenho um programa C ++ de amostra para gerenciar o driver. Com dois comandos para compilar em um makefile:
g++ -I./ -I../include -c main.cpp
-> inclua um arquivo chamado "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
Todos os caminhos são bons e nenhum erro é relatado no momento da compilação, mas depois ldd
no executável final ldd sgfplibtest_fdu03
diz:
/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)
- Edite o mesmo driver com o 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)
O mesmo exe (mas compilado para x86) não parece exigir mais nada. Estou totalmente perdido ....
ldd
é uma boa maneira de dizer. Observe que não há apenas uma arquitetura ARM - o pi é ARM11, também conhecido como. ARMv6 e existe um ARMv7 (Cortex) que não é compatível. Eu não conheço uma maneira fácil de diferenciar os executáveis.
ldd mylib.so
e veja o que sai