não pode encontrar - Nenhum tal arquivo ou diretório - libusb - Ubuntu 32 & 64 bit

1

Estou tentando escrever um programa que transfere dados para o meu dispositivo. Eu estou usando o libusb. Eu tive muitos problemas para instalar o pacote em 32 & Edição de 64 bits do Ubuntu 16 LTS. Comandos para instalação:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libusb-1.0-0-dbg

também tentou: link

"dpkg -l libusb *" no Ubuntu 64 bits; mostra que foi instalado enquanto o 32 bit one anuncia "no such package ...".

Comando de compilação:

sudo gcc -g -o usbtest usbtest.c -lusb-1.0

No Ubuntu 64 bit compilado em 32 bits, a seguinte nota apareceu:

/usr/bin/ld: cannot find -lusb-1.0
collect2: error: ld returned 1 exit status

mas eu tinha certeza de que existia então tentei seguir o comando e compilá-lo sem nenhum erro.

sudo gcc -g -o usbtest usbtest.c -L/usr/local/lib -lusb-1.0

no final, quando eu executar o meu programa, ele não consegue encontrar o meu dispositivo em outras palavras, não pode abrir o dispositivo. seguindo apresenta procedimento de depuração no Ubuntu (32 & 64 bits):

141      int r = 1; 
(gdb) s
143      r = libusb_init(NULL); 
(gdb) 
libusb_init (context=0x0) at ../../libusb/core.c:1983
1983    ../../libusb/core.c: No such file or directory.
(gdb) 
1985    in ../../libusb/core.c
(gdb) 
__GI_getenv (name=0xb7fb2f16 "LIBUSB_DEBUG") at getenv.c:34
34  getenv.c: No such file or directory.
(gdb) 
__x86.get_pc_thunk.bx () at ../sysdeps/i386/i686/multiarch/../memcmp.S:80
80  ../sysdeps/i386/i686/multiarch/../memcmp.S: No such file or directory.
(gdb) 
__GI_getenv (name=0xb7fb2f16 "LIBUSB_DEBUG") at getenv.c:35
35  getenv.c: No such file or directory.
(gdb) 
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:43
43  ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
(gdb) 
44  in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S

Eu não tenho ideia do que devo fazer.

    
por CodeFreak 03.11.2017 / 21:47

1 resposta

0

Não tenho certeza do que você está tentando alcançar; você precisa da libusb para trabalhar tanto em 32 quanto em 64 bits? Ou apenas um deles? Em qualquer caso, a biblioteca deve ser instalada especificamente para a arquitetura correta. O comando de instalação, por padrão, instalaria apenas sua versão "própria" da biblioteca. Você pode dizer especificamente para instalar as duas versões:

sudo apt-get install libusb-1.0-0-dev:i386
sudo apt-get install libusb-1.0-0-dev:amd64

para 32 e 64 bits, respectivamente. Você também pode verificar diretamente os arquivos da biblioteca, no meu sistema (16.04) que eles vivem em

32bit: /usr/lib/i386-linux-gnu/
64bit: /usr/lib/x86_64-linux-gnu

(se você estiver em dúvida, dpkg-query -L libusb-1.0-0-dev mostra onde eles estão instalados.)

Quanto à libusb que você compilou, você precisa saber que está usando a versão correta ao vincular seu programa. Talvez você esteja mixando versões de 32 e 64 bits em / usr / local / lib? gcc / ld não saberia mantê-los separados então.

Quanto à sessão de depuração, o gdb está apenas tentando mostrar as linhas de origem, mas não sabe onde encontrar os arquivos de origem da biblioteca. Caso contrário, não vejo nada que esteja obviamente errado aqui.

    
por rai42 04.11.2017 / 00:17