在iMX8-M+ Yocto板编译libthermalgrabber时找不到libusb-1.0
解决libthermalgrabber编译时找不到libusb-1.0的问题
检查交叉编译工具链的库搜索路径
Yocto交叉编译环境下,aarch64-poky-linux-ld默认搜索路径可能不包含/usr/lib/aarch64-linux-gnu/,可通过两种方式补充:- 在项目CMakeLists.txt中添加库路径:
link_directories(/usr/lib/aarch64-linux-gnu/) - 运行cmake时指定全局库路径:
cmake .. -DCMAKE_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/
同时确认交叉编译工具链的
SDKTARGETSYSROOT环境变量是否正确指向Yocto生成的目标根文件系统,库文件建议放在${SDKTARGETSYSROOT}/usr/lib/目录下,而非主机的/usr/lib/aarch64-linux-gnu/。- 在项目CMakeLists.txt中添加库路径:
验证库文件的完整性与软链接
- 检查
/usr/lib/aarch64-linux-gnu/下是否存在libusb-1.0.so软链接:ls -l /usr/lib/aarch64-linux-gnu/libusb-1.0.so - 若软链接缺失,手动创建(替换实际库版本号):
ln -s /usr/lib/aarch64-linux-gnu/libusb-1.0.so.0.2.0 /usr/lib/aarch64-linux-gnu/libusb-1.0.so - 用交叉编译的ld工具直接验证库的可访问性:
查看输出中的搜索路径和库匹配结果,确认工具能找到目标库。aarch64-poky-linux-ld -L/usr/lib/aarch64-linux-gnu/ -lusb-1.0 --verbose
- 检查
调整CMakeLists.txt的链接配置
改用pkg-config自动定位libusb-1.0的头文件和库路径,替换原直接链接配置:find_package(PkgConfig REQUIRED) pkg_check_modules(LIBUSB REQUIRED libusb-1.0) include_directories(${LIBUSB_INCLUDE_DIRS}) link_directories(${LIBUSB_LIBRARY_DIRS}) target_link_libraries(your_target_name ${LIBUSB_LIBRARIES})若为交叉编译,需指定目标根文件系统路径:
cmake .. -DCMAKE_FIND_ROOT_PATH=/path/to/yocto-target-sysroot确认库文件的架构兼容性
检查安装的libusb库是否为aarch64架构:file /usr/lib/aarch64-linux-gnu/libusb-1.0.so.0输出需包含
ELF 64-bit LSB shared object, ARM aarch64,如果是x86架构,需重新获取对应aarch64的libusb-1.0开发包离线安装。
内容的提问来源于stack exchange,提问作者kremerf
相关产品推荐
相关产品推荐

