libusb移植到Android开发板

[复制链接]
cxss 发表于 2019-5-16 04:07:23 | 显示全部楼层 |阅读模式
来源:https://www.jianshu.com/p/cf754ec37913
若内容不全,可点击上述链接查看来源网页,在网页中点击红色双层向下的箭头阅读全文


前言因公司业务需要,需要做大量的C++代码迁移到Android方面的工作,这是一个费时费力的过程,因为迁移过程中会遇到各种各样的问题,小到.h头文件找不到,大到一个运行不正常。这是我在简书上的第一篇文章,就以迁移libusb到Android开发板为例,整理出本人遇到的问题及解决方法,希望对有需要的朋友有所帮助:使用环境

环境:Ubuntu14.04,tiny4412(Android开发板)工具:NDK,CatkinMake编译包:libusb1.0,libusb0.12

既然要编译libusb,就要了解它,目前为止,libusb库大版本分为1.0.X,0.XX,且两个大版本库中方法差别挺大。libusb1.X与libusb0.X版本语法比较libusb1.0.x主要语法,太多了,截取了部分

图1libusb1.0XX版本部分语法截图

libusb-0.XX版本

图2libusb0.XX版本部分语法截图

查看.so库中包含语法可在linux系统下通过nm命令,例:$nmlibusb.so编译libusb1.X,libusb0.xlibusb1.X源码下载:https://github.com/libusb/libusb.git上边作者介绍有编译方法,这里引用了也提及下,尊重原著,感谢开源奉献;考虑到部分人可能未使用过ndk,这里也简单介绍下编译方法,及如何编译出动态库.so,静态库.a注:大牛,使用过的朋友可忽略这部分,请轻喷。编译:进入jni目录下,通过ndk-build命令编译库:默认编译为动态库.so,如需编译静态库,将libusb.mk最后一行

include$(BUILD_SHARED_LIBRARY)改为:include$(BUILD_STATIC_LIBRARY)

编译运行即可。libusb0.X下载libusb-0.1.12软件包:http://sourceforge.net/projects/libusb/files/解压开,执行<pre>./configure--host=arm-none-linux-gnueabi--prefix=/home/ubuntu/Downloads/installmakemakeinstall</pre>注:host为使用的编译链,prefix为编译出的文件路径连接libusb库在CmakeLists通过link_libraries,target_link_libraries引入.so、.a库通过include_directories引入.h头文件例:.h头文件

set(libusb_INCLUDE_DIRS"/opt/include/mylibusb")include_directories(${libusb_INCLUDE_DIRS})

.so、.a库

set(libusb_LIBRARIES"/opt/lib/libusb-0.1.so")target_link_libraries(xxx${libusb_LIBRARIES})link_libraries(${libusb_LIBRARIES})

遇到的问题:<pre>1.error:undefinedreferenceto'libusb_bulk_transfer'原因:缺少或找不到libusb包,编译中存在使用该包的依赖;解决方法将libusb包编译成arm的添加进去</pre><pre>2.Noruletomaketarget`/opt/lib/libusb-0.1.so'原因:MakeFile文件中没有对应的关联映射解决方法:检查是否路径引用有问题,多数是语法(Cmake)问题。</pre><pre>3.can'tfind-lusb原因:找不到libusb.so包解决方法:查看引用路径时候有问题,确保libusb正确引用。</pre>总结总体来说,该篇定位为libusb迁移入门引导篇更为合适,权且抛砖引玉,希望对大家有所帮助。