Como saber se uma biblioteca ARM (.so) é compatível com o PI framboesa


8

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.sodiz:

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 lddno executável final ldd sgfplibtest_fdu03diz:

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


Pode estar dependendo de algo que não está instalado. Corra ldd mylib.soe veja o que sai
Lawrence

ldd mylib.so diz "não é um executável dinâmico" :(
Gilles Grandguillaume

"não é um executável dinâmico" == Acho que você está sem sorte. 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.
goldilocks

é o inverso. o driver é para ARM9, acho que alguns programas para ARM9 são compatíveis com ARM11. mas no meu caso ... não parece :(.
Gilles Grandguillaume

Respostas:


4

Tente ldd foo.soe veja se há alguma saída razoável. Se você receber "aviso: você não tem permissão de execução", é porque os arquivos .so devem ser executáveis ;).

Além disso, não sei se existe uma maneira simples de verificar um .so quanto à compatibilidade do sistema, mas duvido que você receba o erro "Não encontrado" - acho que realmente não consegue encontrá-lo (também acho que há é um erro "formato de arquivo não reconhecido" mais apropriado e, de fato, o vinculador pode não reconhecer esse problema para começar). Portanto, apenas para ter certeza de que estamos na mesma página:

  • Crie um link simbólico no mesmo diretório, ln -s foo.so libfoo.so.1- mais tarde é o que o ld estará procurando.

  • Agora compile um programa de teste g++ -L/directory/path test.cpp -lfoo.

Ainda diz "Não existe esse arquivo ou diretório"?

Saída WRT ldd, se você obtiver coisas assim:

libsgfpamx.so => not found

Indica que o .so está vinculado a outro .so que não pode ser encontrado no caminho da biblioteca e, portanto, provavelmente não está instalado. Se houver motivos para acreditar que esta é uma biblioteca comum que deve estar disponível - por exemplo. pthreads - você pode procurar no repositório raspbian por pacotes que contenham esse arquivo:

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

Agora sabemos que existem vários pacotes com esse nome de arquivo (libc6-dev e libc6: armhf). Claro que o pthreads já está instalado de qualquer maneira. Voltando ao seu problema real:

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

Implicando fortemente que estamos sem sorte WRT um pacote raspbian.

A pesquisa online de "libsgfpamx.so" e "sgfpamx" não retorna ... nada. Quase certamente essas são coisas esotéricas ou internas que foram construídas junto e mylib.so, se você já as tiver em algum lugar, está com sorte; caso contrário, terá que consultar as pessoas responsáveis ​​por "mylib.so".


Eu editei minha pergunta.
Gilles Grandguillaume

@GillesGrandguillaume: adicionei ao final da minha resposta em resposta.
goldilocks

então eu não entendo por que o mesmo código de exemplo funciona no debian ... com a mesma resposta do comando "dpkg -S libsgfpamx.so". Eu editei minha pergunta. desculpe por desperdiçar seu tempo.
Gilles Grandguillaume

-2

As bibliotecas libsg são bibliotecas Secugen. Você precisará obter um SDK e reconstruí-lo para sua plataforma.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.