usbmuxd通过交叉编译移植到Android上(三)之libusb1.0

代码获取:1、git clone http://git.libimobiledevice.org/libusb.git

                  2、libusb: libusb for android - Gitee.com

简介:

      libusb是一个开源库,允许从user space与USB外备直接通信,而不需要编写内核驱动。适合于应用程序开发人员使用。支持USB1.0 ~3.1协议,支持Linux, macOS, Windows (Vista and newer), Android, OpenBSD/NetBSD, Haiku, Solaris等平台。

     今天讲在如何移植到android,下载代码后,cd android/jni,如果没有可以自己创建并编写编译规则,目录结构如下图:

执行ndk-build,如下libusb1.0.a表示移植成功

 

交叉编译 `libusb` 时出现的 `libusb-1.0.la` 错误 `all-recursive` 错误通常与构建系统配置、库路径设置交叉编译环境不完整有关。以下是针对这些问题的具体分析解决方法。 ### libusb-1.0.la 相关错误 `.la` 文件是由 GNU Libtool 生成的元数据文件,用于描述库的依赖关系安装路径。在交叉编译过程中,如果 `.la` 文件中记录的路径与目标平台不符,者 Libtool 检测到无法兼容的架构信息,就会导致链接失败。 在交叉编译环境中,建议通过指定 `--prefix` `--host` 参数来确保生成的 `.la` 文件中的路径正确指向目标平台的库目录: ```bash ./configure --host=arm-linux --prefix=/opt/crosstool/arm-linux/libusb ``` 随后执行 `make` `make install`,可以避免因路径错误导致的 `.la` 文件问题 [^4]。 此外,在某些情况下,Libtool 会尝试自动检测编译器是否支持特定特性(如 `-fPIC`),但交叉编译环境下这种检测可能失败。可以通过手动传递 CFLAGS 来规避此类问题: ```bash CFLAGS="-fPIC -std=gnu99" ./configure --host=arm-linux --prefix=/opt/crosstool/arm-linux/libusb ``` 这样可确保生成的 `.la` 文件与目标平台兼容 [^2]。 ### all-recursive 错误 `all-recursive` 是 Autotools 构建系统的一部分,表示递归进入子目录进行编译。如果在此阶段报错,通常是因为子目录结构不完整、权限不足,者缺少必要的构建依赖项。 例如,在引用中提到的目录 `/share/libusb-1.0.9` 中执行 `make` 时进入了 `libusb` 子目录进行编译并生成了 `libusb-1.0.la` 文件 [^1]。若此过程因缺少头文件、未正确配置交叉编译工具链等原因中断,则会导致 `all-recursive` 阶段失败。 为避免此类错误,应在执行 `make` 前确保以下几点: - 所有源码文件完整且未损坏; - 已使用正确的交叉编译工具链配置(包括 `CC`, `AR`, `RANLIB` 等环境变量); - 头文件路径(如 `-I/opt/crosstool/.../include/libusb-1.0`)已正确设置 [^2]; - 使用 `--prefix` 指定的安装路径具有写入权限。 --- ### 示例:完整的交叉编译流程 ```bash # 设置交叉编译工具链 export CC=arm-linux-gcc export AR=arm-linux-ar export RANLIB=arm-linux-ranlib # 配置构建环境 ./configure --host=arm-linux --prefix=/opt/crosstool/arm-linux/libusb \ CFLAGS="-fPIC -std=gnu99 -I/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/include/libusb-1.0" # 执行构建 make clean && make # 安装到指定目录 make install ``` 该流程可有效避免 `.la` 文件路径错误及 `all-recursive` 构建失败的问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值