最近在调试代码的过程中,发现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