Ubuntu22.04下CLion编译libusb程序遇undefined reference错误求助
解决libusb链接错误的CMake配置方案
核心问题定位
undefined reference to libusb_xxx是链接阶段未找到libusb库文件导致的,本质是CMake配置未正确关联libusb的库资源。以下是针对性解决方法:
推荐CMake配置(使用pkg-config自动定位库)
替换原CMakeLists.txt内容,用CMake官方推荐的方式自动识别系统中的libusb库:
cmake_minimum_required(VERSION 3.22) project(libusb_test) set(CMAKE_C_STANDARD 11) # 依赖pkg-config查找libusb-1.0 find_package(PkgConfig REQUIRED) pkg_check_modules(LIBUSB REQUIRED libusb-1.0) # 引入libusb头文件目录 include_directories(${LIBUSB_INCLUDE_DIRS}) # 生成可执行文件 add_executable(libusb_test main.c) # 链接libusb库 target_link_libraries(libusb_test ${LIBUSB_LIBRARIES})
该配置会自动读取libusb的头文件路径、库路径及链接参数,避免手动写死路径的误差。
手动指定库路径(适用于特殊安装场景)
如果libusb未安装在系统默认路径,或pkg_check_modules无法识别,可手动配置:
cmake_minimum_required(VERSION 3.22) project(libusb_test) set(CMAKE_C_STANDARD 11) # 手动指定libusb头文件目录 include_directories(/usr/include/libusb-1.0) add_executable(libusb_test main.c) # 手动链接libusb库(usb-1.0对应系统中的libusb-1.0.so文件) target_link_libraries(libusb_test usb-1.0)
验证依赖安装有效性
若配置后仍报错,先确认依赖是否真的安装到位:
- 执行
dpkg -L libusb-1.0-0-dev,检查输出中是否包含/usr/include/libusb-1.0/libusb.h和/usr/lib/x86_64-linux-gnu/libusb-1.0.so - 若缺失,重新安装依赖:
sudo apt install --reinstall libusb-1.0-0-dev
CLion环境适配操作
- 点击CLion右上角的
Reload CMake Project按钮,让新配置生效 - 删除项目根目录下的
cmake-build-debug/cmake-build-release文件夹,清理旧构建文件后重新编译
最小可用测试代码(验证调用正确性)
确保代码本身无语法或调用错误,以下是可直接运行的测试示例:
#include <libusb-1.0/libusb.h> #include <stdio.h> int main() { libusb_context *ctx = NULL; int ret = libusb_init(&ctx); if (ret != 0) { printf("libusb init failed: %s\n", libusb_error_name(ret)); return 1; } printf("libusb init success\n"); libusb_exit(ctx); return 0; }
内容的提问来源于stack exchange,提问作者Wonster
相关产品推荐
相关产品推荐

