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

voj3qocg  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(215)

我一直在与cmake摔跤几个小时后结束现在,但我现在得到它来构建make文件,但我正在努力让make命令正常工作。我相信这是我的libub链接的问题,但我很无知。我在Windows上使用cmake GUI。我将提供我的配置是x1c 0d1x的截图,我相信这些都是他们应该如何从LIBUSB_1_LIBRARY除了我认为它不是一个实际的.dll文件(它的a. dll. a),但我找不到一个libusb-1. 0. dll的任何地方。在我的libusb-MinGW/lib文件夹中,我有libusb-1.0.alibusb-1.0.dll.alibusb-1.0.la,我还有一个包含libusb-1.0.pc的pkgconfig文件,所以我不确定是否正确。在libusb-MinGW/bin文件夹中还有一个名为msys-usb-1.0.dll的dll文件,这是我能找到的唯一的.dll文件,所以也许它就是那个我不确定的文件。如果这是一个非常琐碎的问题,我提前道歉,但我对C相关的任何东西都是非常新的,我只有Python和Java的经验,所以这对我来说是非常未知的领域,似乎没有太多关于如何安装libfreekinect的文档,除了github页面,但我已经看了很长时间了,我没有从中得到任何东西。

  • EDIT -我完全忘记了在运行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'
tmb3ates

tmb3ates1#

我也遇到了同样的问题(使用MSYS 64)
我从源代码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 was found
现在编译

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

它现在正确地构建。
我希望这可以帮助你找到问题。

相关问题