【发布时间】:2016-01-25 15:14:57
【问题描述】:
我正在尝试在项目中使用 LibUSB。但是,每当我尝试使用基本的 libUSB 功能时,都会出现以下错误:
...src/main/main.cpp.o: In function `main':
...src/main/main.cpp:10: undefined reference to `libusb_init'
...src/main/main.cpp:11: undefined reference to `libusb_set_debug'
collect2: error: ld returned 1 exit status
安装了 LibUSB-devel 包(我在 fedora 22 上),我的 IDE KDevelop 找到并识别标头,一旦您添加了 import 语句,它就会提供 LibUSB 代码完成。我的 IDE 或 CMake(我的构建系统)中没有任何自定义包含行,所以我想知道我需要做什么才能让 CMake 找到 LibUSB 标头。
这是main.cpp的内容,以防我搞砸了:
#include <iostream>
#include <libusb-1.0/libusb.h>
int main(int argc, char **argv) {
libusb_init(NULL);
libusb_set_debug(NULL, LIBUSB_LOG_LEVEL_WARNING);
/*snip*/
std::cout << "Hello, world! PTPID=" << std::endl;
return 0;
}
以下是CMakeLists.txt:
../
cmake_minimum_required(VERSION 2.8.11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_BUILD_TYPE Debug)
project(aProjectThatHasHadIt'sNameObcured)
add_subdirectory(src)
.../src/cmakelists.txt 只是添加子目录
.../src/main/
add_executable(main main.cpp)
【问题讨论】:
-
未定义的引用是链接器错误,所以它们是关于查找库,而不是标题。也许您可以展示您的项目如何使用 CMake 链接到 LibUSB?
-
您是否从 libusb 链接二进制文件?
-
看起来你误会了一些 libusb 的链接器标志
-
包含路径(存储标头的位置)和库之间存在差异。您需要显式配置您的构建系统以链接到您正在使用的库。我在你的 CMake 代码中没有看到
target_link_libraries()调用,所以你显然没有链接到 LibUSB。 -
@NathanOliiver 我改进了标题
标签: c++ cmake linker-errors