Gcc libusb在路径中,但链接器没有';我找不到

Gcc libusb在路径中,但链接器没有';我找不到,gcc,linker,Gcc,Linker,通常,当链接器在路径中找不到实际存在的库时,这是因为某些二进制不兼容(即大约32/64位)。 在我的情况下,情况似乎有所不同,我没有找到一个问题来回答这个问题 Rapsberry Pi 3B+,Raspbian Stretch Lite,正在尝试为3DTouchPad编译微芯片SDK 编译失败的原因如下: mkdir -p build/bin gcc -o build/bin/2draw build/2draw/2draw.o -Lbuild/bin -lmchp_hmi -L/lib/arm

通常,当链接器在路径中找不到实际存在的库时,这是因为某些二进制不兼容(即大约32/64位)。 在我的情况下,情况似乎有所不同,我没有找到一个问题来回答这个问题

Rapsberry Pi 3B+,Raspbian Stretch Lite,正在尝试为3DTouchPad编译微芯片SDK

编译失败的原因如下:

mkdir -p build/bin
gcc -o build/bin/2draw build/2draw/2draw.o  -Lbuild/bin -lmchp_hmi -L/lib/arm-linux-gnueabihf/ -lusb -Wl,-rpath,\$ORIGIN -lcurses
/usr/bin/ld: cannot find -lusb
collect2: error: ld returned 1 exit status
Makefile:125: recipe for target 'build/bin/2draw' failed
make: *** [build/bin/2draw] Error 1
以下是关于“缺失”库的详细信息:

我觉得没问题。我是用sudo apt get install libusb-1.0-0-dev安装的

是否有任何其他原因会阻止链接器查找现有库

编辑 很有趣。。。即使我也无法推断原因

$ ld -lusb --verbose
GNU ld (GNU Binutils for Raspbian) 2.28
  Supported emulations:
   armelf_linux_eabi
   armelfb_linux_eabi

==================================================
attempt to open //usr/local/lib/arm-linux-gnueabihf/libusb.so failed
attempt to open //usr/local/lib/arm-linux-gnueabihf/libusb.a failed
attempt to open //lib/arm-linux-gnueabihf/libusb.so failed
attempt to open //lib/arm-linux-gnueabihf/libusb.a failed
attempt to open //usr/lib/arm-linux-gnueabihf/libusb.so failed
attempt to open //usr/lib/arm-linux-gnueabihf/libusb.a failed
attempt to open //usr/local/lib/libusb.so failed
attempt to open //usr/local/lib/libusb.a failed
attempt to open //lib/libusb.so failed
attempt to open //lib/libusb.a failed
attempt to open //usr/lib/libusb.so failed
attempt to open //usr/lib/libusb.a failed
attempt to open //usr/arm-linux-gnueabihf/lib/libusb.so failed
attempt to open //usr/arm-linux-gnueabihf/lib/libusb.a failed
ld: cannot find -lusb

对于格式为
-lLIB
的参数,链接编辑器将查找名为
libLIB.so
libliblib.a
的输入文件。如果库名称
LIB
中有版本号,则必须提供该版本号,否则链接编辑器将找不到该版本号。如果版本在soname中位于
.so
之后,通常会添加一个以
.so
结尾的动态链接,而不包含该版本,以便链接编辑器可以找到它。(此符号链接通常由发行版打包在
-dev
-devel
包中。)但在您的情况下,此符号链接包含
之前的版本号。因此
(尽管不必如此)


将版本号放在库名称(上面的
LIB
部分)中的一个优点是,可以轻松地在针对库的不同版本的链接之间切换。

-lusb-1.0
传递给链接器似乎可以修复错误。但我认为so文件的版本控制是自动考虑的!
$ ld -lusb --verbose
GNU ld (GNU Binutils for Raspbian) 2.28
  Supported emulations:
   armelf_linux_eabi
   armelfb_linux_eabi

==================================================
attempt to open //usr/local/lib/arm-linux-gnueabihf/libusb.so failed
attempt to open //usr/local/lib/arm-linux-gnueabihf/libusb.a failed
attempt to open //lib/arm-linux-gnueabihf/libusb.so failed
attempt to open //lib/arm-linux-gnueabihf/libusb.a failed
attempt to open //usr/lib/arm-linux-gnueabihf/libusb.so failed
attempt to open //usr/lib/arm-linux-gnueabihf/libusb.a failed
attempt to open //usr/local/lib/libusb.so failed
attempt to open //usr/local/lib/libusb.a failed
attempt to open //lib/libusb.so failed
attempt to open //lib/libusb.a failed
attempt to open //usr/lib/libusb.so failed
attempt to open //usr/lib/libusb.a failed
attempt to open //usr/arm-linux-gnueabihf/lib/libusb.so failed
attempt to open //usr/arm-linux-gnueabihf/lib/libusb.a failed
ld: cannot find -lusb