Linux下编译安装libusb动态库(.so) - libus1-0 vs libusb-0.1

article/2025/10/30 23:31:02

最近在调试代码的过程中,发现libusb库中的一些方法没办法debug到,所以试着下载了一版源码,编译安装到指定的目录。这样,在工程的pro文件中,直接指定库和头文件的目录就可以引用自己编译的libusb库了。
在网上查了相关的方法并结合实际环境,总结了安装的步骤以及遇到的问题和解决方案。

当前环境

SLED 15-SP2 (5.3.18-24.86-default)

代码路径

https://github.com/libusb/libusb
  下载的版本是v1.0.21(从yast上查到的)

依赖库

automake & autoconf

cpp ./bootstrap.sh: line 6: autoreconf: command not found

libtool

libusb/Makefile.am:5: error: Libtool library used but ‘LIBTOOL’ is undefined
libusb/Makefile.am:5: The usual way to define ‘LIBTOOL’ is to add ‘LT_INIT’
libusb/Makefile.am:5: to ‘configure.ac’ and run ‘aclocal’ and ‘autoconf’ again.
libusb/Makefile.am:5: If ‘LT_INIT’ is in ‘configure.ac’, make sure
libusb/Makefile.am:5: its definition is in aclocal’s search path.
autoreconf: automake failed with exit status: 1

libudev

checking for libudev.h… no
configure: error: “udev support requested but libudev not installed”

编译步骤

  • 生成 configure文件
    高版本中没有configure文件,手动需要生成,低版本直接执行configure文件加上需要的参数即可。当前版本需要手动生成configure文件, Readme.git。
    执行 ./bootstrap.sh
> `由于项目中没有configure文件,根据Readme.git文件, 需要执行/autogen.sh or> ./bootstrap.sh来生成configure文件。
> 其中,二者的区别是,前者生成configure之后自动执行configure,后者仅生成
> configure不执行,所以,如果需要执行makefile的参数,则最好使用bootstrap.sh。
> 在执行bootstrap.sh的过程中可能会报错,提示缺少依赖库,逐一安装就行`。

生成Makefile
执行 ./configure --prefix=/home/ms1/workspace/usbInstallPath --enable-system-log

--prefix指定安装目录

编译
make
安装
make install

会自动在指定的安装路径,生成include和lib64文件夹,里面分别放着 libusb.h和生成的库文件。

设置log输出
在客户程序中调用 libusb_set_debug(nullptr, LIBUSB_LOG_LEVEL_DEBUG); 把log level 级别设置成debug level,但是打开以后会有大量的log输出,如果是调试固定几个函数,可以设置成warning level LIBUSB_LOG_LEVEL_WARNING
打印log:
usbi_warn() // LIBUSB_LOG_LEVEL_WARNING
usbi_dbg() //LIBUSB_LOG_LEVEL_DEBUG

tips:

注意这里编译的是libusb-1(里面实现了lib_usb_xxx方法), 系统还有一个libusb-0,二者是两个不同的库。
在这里插入图片描述
系统默认安装了 libusb-0_1-4(所以/usr/lib64下有libusb-0.1.so.4), 和libusb-1_0-0(所以/usr/lib64下有libusb-1.0.so, 给的包是release包不是dev包,所以要再安装一个dev包以获得头文件,否则build代码的时候报缺少libusb.h头文件, 所以,想替换libusb-1其实只需要编译对应版本的源码, 替换libusb-1.0.so,保留libusb-0_1-4变。
两种版本下载地址及生成的库文件:
1)libusb-1.0.21: https://github.com/libusb/libusb-compat-0.1/tree/0.1.4 编译之后没有Libusb-0.1.so.4
在这里插入图片描述

2)Libusb-0.1.so.4:https://github.com/libusb/libusb-compat-0.1/tree/0.1.4 ,编译之后包含libusb-0.1.so.4
在这里插入图片描述
Pro文件里:
-lusb默认指的是libusb.so
-lusb-1.0默认指的是libusb-1.0.so


http://chatgpt.dhexx.cn/article/qDXEBlj2.shtml

相关文章

linux编译生成动态库、静态库,以及使用

一、介绍 在实际开发过程中,当代码的文件较多,可以将一部分代码编译成动态库或者静态库然后再加载到程序中使用 编译过程 1、预编译 2、编译 3、汇编 4、链接 静态库和动态库的差异 1、链接静态库简单理解就是复制目标代码嵌入可执行文件中 2、动态库是…

Linux·libusb源码编译

libusb系列--Linux下libusb源码编译​​ ​ ​源码下载及解压​​ ​​下载源码​​ ​​解压下载的源码压缩包​​ ​​打开终端​​ ​​准备编译环境​​ ​​安装make dh-autoreconf​​ ​​安装 libudev-dev​​ sudo ​./autogen.sh​ ​​​​sudo ./configure --prefi…

ESP32如何用makefile直接编译生成.a静态库

目录 编译痛点前提环境编译准备makefile代码编译痛点 开发过esp系列的攻城狮们都知道,esp32的sdk包含了编译器、组件代码和例程代码,编译都是基于cmake的,都是整体一起编译,CMakeList.txt,component.mk,project.mk等等一系列和编译相关的文件,如果你想要自己编译一个自…

Linux 环境下的静态库生成与使用

目录 一,简介 二,如何生成静态链接库 1.准备测试程序 三,如何使用静态链接库 1.生成静态链接库 2.使用静态链接库 一,简介 这里我们只讲 Linux 环境下的静态库与动态库的生成与使用, Windows直接用VS直接就能生成…

Linux 下libusb编译与生成动态链接库

一、前言 上一篇文章提到了怎样使用Ubuntu 安装libusb,忘了如何将如何编译。 二、libusb使用GCC 编译 正常来讲,使用 gccc xxx.c -o xxx -I/usr/include -lusb-1.0 就可以了,如下图: 但是,当使用Ubuntu 12.04 使用…

关于libusb开源库的使用

关于libusb开源库的使用 文章目录 关于libusb开源库的使用1. 概述1.1 介绍1.2 用法 2. API接口2.1 分类2.2 初始化/反初始化2.3 获取设备2.4 打开/关闭设备2.5 根据ID打开设备2.6 描述符相关函数2.6.1 获得设备描述符2.6.2 获得/释放配置描述符 2.7 detach/attach驱动2.7.1 两种…

【Linux】 自动化编译工具make

目录 一:make工具 二:Makefile 三:Makefile基本规则 四:make是如何工作的 五:示例(五个阶段的Makefile) 5.1 第一阶段Makefile 5.2 第二阶段Makefile 5.3 第三阶段Makefile 5.4 第四阶段Makefile 5.5 第五阶…

【Linux操作系统】动态库,静态库的制作和使用,软链接、硬链接简介

目录 软硬链接咋创建一个软链接?咋创建一个软链接? 文件的三个时间动静态库制作静态库静态库的使用制作动态库动态库的使用 秃头侠们好呀,今天来说 软硬连接,动静态库 软硬链接 咋创建一个软链接? ln -s log.txt log…

【Linux】零基础学习动静态库打包

文章目录 一、软硬链接二、动静态库理解动静态库静态库的打包使用静态库打包Makefile编写动态库的打包使用动态库打包Makefile编写对于小版本的理解 总结 一、软硬链接 站在先前的讲过的文件系统的角度来看,下图test这个文件有自己独立的inode,在他的ino…

Linux | 动静态库 | 动静态链接 | makefile库打包 | 第三方库使用

文章目录 何为动静态库库文件的链接静态链接静态库打包动态链接动态库打包 第三方库的使用静态库的使用动态库的使用 在系统层面上的动态链接理解 何为动静态库 静态库(.a):在程序编译链接时将静态库二进制码拷贝到程序代码中,程序运行时不再需要外部的静…

覆盖libc.so.6的惨痛教训

覆盖libc.so.6的惨痛教训 背景问题原因解决1、当前session未断开2、OS崩溃重启,所有ssh session断开 惨痛教训1、对于上产环境的内核依赖库文件不能随意覆盖、删除。2、 scp 文件覆盖问题 总结参考 背景 发生时间: 2022年11月28日08:55:20 偷了个懒,在安…

【Linux】自动生成makefile(ubuntu)

文章目录 前言一、Automake工具二、具体步骤1.下载Automake2.autoscan3.重命名configure.scan为configure.ac4.修改重命名后的configure.ac5.执行aclocal命令6.autoheader7.autoconf8.创建Makefile.am9.automake10.执行configure11.执行make12.执行Makefile编译完生成的可执行文…

【Linux】基础IO —— 下(实现动静态库)

🎇Linux:基础IO 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看…

【Linux】第九章 动态库和静态库(生成原理+生成和使用+动态链接)

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

Linux——自动化编译(make的使用)、库文件(静态库和共享库的使用)

一、make的使用(自动化编译) make是Linux上的工程管理工具,可以实现自动化编译;make可以提高我们的编译效率。 1.安装make 命令:sudo apt install make 2.make的用法 (1)创建makefile文件&am…

rpc系列-ZooKeeper

一.简介 Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务。 Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)。 Zookeeper所提供的服务涵盖:主从协调、服务器节点…

HBase 一文读懂

本文基于《尚硅谷大数据技术之HBase》编写。 HBase 简介 HBase定义 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。 HBase数据模型 HBase的数据模型同关系型数据库(RDMS)很类似,数据存储在一张表中,有行有列。但从H…

Zookeeper学习

文章目录 今日目标apache zookeeperzookeeper的概念分布式和集群的理解zookeeper的集群架构和角色zookeeper的5大特性部署zookeeper集群环境计算机集群的安装部署三台节点(克隆两台)配置节点内存和CPUzookeeper安装 zookeeper的数据模型zookeeper的节点类…

Redission和Zookeeper分别实现分布式锁

Redission和Zookeeper分别实现分布式锁(windows) 1、Redission实现分布式事务 1.1 前提准备 下载好nginx(windows版本)下载好Jmeter(模仿高并发)下载好redis(windows版) 1.2 代码…

Zookeeper 客户端之基本操作指令

ZooKeeper命令行工具类似于Linux的shell环境,不过功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据修改等操作. 命令行工具的一些简单操作如下: zkCli.sh客户端连接命令 ls 与 ls2 命…