You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:25:20