找不到 - 没有这样的文件或目录 - libusb - Ubuntu 32 和 64 位

找不到 - 没有这样的文件或目录 - libusb - Ubuntu 32 和 64 位

我正在尝试编写一个将数据传输到我的设备的程序。我正在使用 libusb。我在 Ubuntu 16 LTS 的 32 位和 64 位版本中安装其软件包时遇到了很多问题。安装命令:

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

还尝试过:http://www.linuxfromscratch.org/blfs/view/svn/general/libusb.html

在 Ubuntu 64 位中“dpkg -l libusb*”显示已安装,而在 32 位中则显示“没有这样的包……”。

编译命令:

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

在 Ubuntu 64 位中它可以编译,而在 32 位中出现以下提示:

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

但我确信它存在,然后我尝试按照命令进行操作,并且编译时没有任何错误。

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

最后当我执行我的程序时,它找不到我的设备,换句话说无法打开该设备。以下介绍 Ubuntu(32 位和 64 位)中的调试过程:

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

我不知道我该怎么办。

答案1

我不完全确定您想要实现什么;您是否需要 libusb 在 32 位和 64 位上运行?还是只需要其中一个?无论如何,必须专门为正确的体系结构安装库。默认情况下,安装命令只会安装其“自己的”版本的库。您可以明确告诉它安装两个版本:

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

分别为 32 位和 64 位。您也可以直接检查库文件,在我的系统 (16.04) 上,它们位于

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

(如果您有疑问,dpkg-query -L libusb-1.0-0-dev请显示它们的安装位置。)

至于您自己编译的 libusb,您需要在链接程序时跟踪您使用的是正确的版本。也许您在 /usr/local/lib 中混合了 32 位和 64 位版本?那么 gcc / ld 就不知道将它们分开了。

至于调试会话,gdb 只是试图向您显示源代码行,但不知道在哪里找到库的源文件。否则我看不出这里有什么明显错误。

相关内容