如何解决 make 文件中 libusb 的链接问题

问题描述 投票:0回答:1

我现在已经与 cmake 搏斗了好几个小时,但我现在正在用它来构建 make 文件,但我正在努力让 make 命令正常工作。我相信这是我的 libusb 链接的问题,但我很无能。我在 Windows 上使用 cmake GUI。我将提供我的配置的屏幕截图我相信这些都是它们应该与LIBUSB_1_LIBRARY分开的方式,我认为它不是一个实际的.dll文件(它是一个.dll.a),但我找不到libusb -1.0.dll 任何地方。在我的 libusb-MinGW/lib 文件夹中,我有

libusb-1.0.a
libusb-1.0.dll.a
libusb-1.0.la
我还有一个包含
libusb-1.0.pc
的 pkgconfig 文件,所以我不确定是否存在正确的文件。 libusb-MinGW/bin 文件夹中还有一个名为
msys-usb-1.0.dll
的 dll 文件,它是我能找到的唯一 .dll 文件,所以也许就是我不确定的那个文件。如果这是一个非常微不足道的问题,我提前道歉,但我对与 C 相关的任何东西都很陌生,我真的只有 python 和 java 经验,所以这对我来说是非常未知的领域,而且似乎没有太多关于如何操作的文档除了 github 页面之外安装 libfreekinect,但我已经看了很多年了,但我没有从中得到任何东西。

  • 编辑 - 我完全忘记包含运行 make 命令时的输出。我得到了一堵很大的文本墙,它们给出了相同的内容,但输出不同,我将提供几行
C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\freenect.dir/objects.a(tilt.c.obj):tilt.c:(.text+0x4b): undefined reference to `libusb_bulk_transfer'
C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\freenect.dir/objects.a(tilt.c.obj):tilt.c:(.text+0xbf): undefined reference to `libusb_error_name'
C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\freenect.dir/objects.a(tilt.c.obj):tilt.c:(.text+0x1cc): undefined reference to `libusb_bulk_transfer'
cmake mingw libusb openkinect libfreenect2
1个回答
0
投票

我有同样的问题(使用MSYS64)

我已经从源码 libusb(1.0) 构建了这样的

cd libusb
./configure --prefix /usr/local
make -j4
make install  

我可以在/usr/local/lib

中看到文件

并且在*/usr/local/lib/pkgconfig/libusb-1.0.pc中有一个.pc文件

所以 - 我去创建一个项目,不必要链接到这个库

cd Dev
mkdir TestCm && cd TestCm

在其中我放置了一个“Hello.world”C 文件..没有其他任何东西。

然后我创建一个 CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(TT)
set(SOURCE hello.c)
add_executable(T ${SOURCE})
include(FindPkgConfig)
pkg_checK_modules(USB libusb-1.0)
if (USB_FOUND)
        message(STATUS "libusb-1.0 was found")
        target_link_libraries(T ${USB_LIBRARIES})
else()
        message(WARNING "libusb-1.0 was not found")
endif()

所以构建它......

mkdir build && cd build 
cmake ../  

我看到信息消息libusb-1.0 已找到

现在编译

make VERBOSE=1

我得到一个错误

-lusb-1.0: No such library or directory 

我手动检查/usr/local/lib/pkgconfig/linusb-1.0.pc

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: libusb-1.0
Description: C API for USB device access from Linux, Mac OS X, Windows, OpenBSD/NetBSD and Solaris userspace
Version: 1.0.26
Libs: -L${libdir} -lusb-1.0
Libs.private:  -Wl,
Cflags: -I${includedir}/libusb-1.0

这看起来不错。然而,链接中缺少 -L{$libdir} ...

输入ccmake

我使用 ccmake 仔细检查了这一点..

切换到高级模式(按t),然后滚动到底部,我找到了pkg_config_lib_USB_libusb-1.0,它指向另一个目录(/mingw64/lib/linusb-1.0.a)

CMake 现在更改为

cmake_minimum_required(VERSION 3.15)
project(TT)
set(SOURCE hello.c)
add_executable(T ${SOURCE})

include(FindPkgConfig)
pkg_checK_modules(USB libusb-1.0)
if (USB_FOUND)
        message(STATUS "libusb-1.0 was found")
        #       target_link_libraries(T ${USB_LIBRARIES})
        target_link_libraries(T ${pkg_config_lib_USB_libusb-1.0})
else()
        message(WARNING "libusb-1.0 was not found")
endif()

(再次)构建

所以

cmake ../
make VERBOSE=1

现在可以正确构建了。

我希望这可以帮助您找到问题。

© www.soinside.com 2019 - 2024. All rights reserved.