我正在尝试构建一个使用LibUSB库的应用程序。
在上一个问题中,我问过here我被告知要使用find_path
和find_library
来进行CMake搜索标题和二进制文件。但是,即使使用dnf
手动查找库的安装位置并将其指定为PATHS
或HINTS
,我仍然会收到错误:
/usr/bin/ld: cannot find -lUSB
collect2: error: ld returned 1 exit status
以下是相关的cmakelists.txt,我在main.cpp中的导入行是#include <libusb-1.0/libusb.h>
add_executable(project main.cpp)
find_path(LIBUSB_INCLUDE_DIR
NAMES libusb.h
PATHS "/usr/include/"
PATH_SUFFIXES "include" "libusb")
find_library(LIBUSB_LIBRARY
NAMES USB
HINTS "/usr/lib/" "/usr/lib64/" "/usr/include/"
PATH_SUFFIXES "lib" "lib32" "lib64")
target_include_directories(project PRIVATE "/usr/lib/" "/usr/lib64/")
target_link_libraries(project USB)
显然我在这些黑客攻击中做错了什么,但有人可以告诉我什么吗?
答案 0 :(得分:1)
您没有在任何地方使用查找操作的结果。您告诉CMake查找标题并在LIBUSB_INCLUDE_DIR
中存储找到的路径,然后找到该库并将其存储在LIBUSB_LIBRARY
中,然后您将忽略这些并使用硬编码"/usr/lib/" "/usr/lib64/"
而USB
代替。试试这个:
target_include_directories(project PRIVATE ${LIBUSB_INCLUDE_DIR})
target_link_libraries(project ${LIBUSB_LIBRARY})
答案 1 :(得分:0)
如图所示返回原始问题here,所有发现和包含功能都可以简单地替换为:
target_link_libraries(project_name <other_dependencies> usb-1.0)
,
在定义构建目标的文件中。