libftdi库编译

目录

1. 下载源码

2. Ubuntu下编译

2.1 配置编译环境

2.2 编译

3. Android NDK下编译

3.1 编译libconfuse

3.2 编译libusb

3.3 编译libudev

3.3 编译libftdi


分2部分,先在Ubuntu中编译,然后在Android NDK中编译。

1. 下载源码

下载地址:

libFTDI » FTDI USB driver with bitbang mode (intra2net.com)icon-default.png?t=N7T8https://www.intra2net.com/en/developer/libftdi/

需要使用git克隆代码:

git clone git://developer.intra2net.com/libftdi

2. Ubuntu下编译

2.1 配置编译环境

进入libftdi文件夹,运行下面的命令:

mkdir build
cd build
cmake  -DCMAKE_INSTALL_PREFIX="/usr" ../

libftdi的依赖库有:libusb 1.0和libconfuse,如果没有对应的库,cmake会返回错误。安装这2个库:

sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libconfuse-dev

2.2 编译

make

一般编译没问题。

3. Android NDK下编译

3.1 编译libconfuse

在NDK下并没有libconfuse,所以需要下载源代码在NDK下编译libconfuse库。libconfuse下载地址:

git clone https://github.com/martinh/libconfuse.git 

可以直接下载正式版(直接github下载的autogen.sh可能不成功) 

https://github.com/libconfuse/libconfuse/releases/

libConfuse 标签 - Gitee.com

配置NDK编译环境(建立下面的envsetup.sh文件)

#!/bin/sh
#export NDK=/home/pq/Project/android-ndk-r17c
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export TARGET=arm-linux-androideabi
export ARCH=arch-arm
export API=21
export AR=$TOOLCHAIN/bin/$TARGET-ar
export CC=$TOOLCHAIN/bin/$TARGET-gcc
export CPP=
export AS=$CC
export CXX=$TOOLCHAIN/bin/$TARGET-g++
export LD=$TOOLCHAIN/bin/$TARGET-ld
export HOST=$TARGET
export RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib
export STRIP=$TOOLCHAIN/bin/$TARGET-stripexport ANDROID_SYSROOT=$NDK/platforms/android-$API/$ARCH
export CPPFLAGS="--sysroot=$ANDROID_SYSROOT -I$ANDROID_SYSROOT/usr/include -D__ANDROID_API__=$API"
export CFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -D__ANDROID_API__=$API"
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -D__ANDROID_API__=$API"
export LDFLAGS="-pthread -lc -L\"=$ANDROID_SYSROOT/usr/lib\""
export PATH=$PATH:$TOOLCHAIN/bin/

注意CPP必须空,如果设置为g++或c++会配置错误(提示fails sanity check)。

运行dos2unix是为了将文件夹下载的文档转换unix格式,否则运行autogen.sh会报错(正式版不需要)。

sudo apt-get install autoconf automake libtool autopoint dos2unix autoconf
find . -type f -exec dos2unix {} \;
source envsetup.sh
sudo ./autogen.sh
sudo ./configure --host=$HOST --target=$TARGET --prefix=$ANDROID_SYSROOT/usr --with-pic
sudo make
sudo make install

其实最好先在Ubuntu中编译通过了再试NDK的方式。

由于libconfuse的configure会提示下面的信息

checking for arm-linux-androideabi-strip... no

将系统的PATH添加NDK的编译环境。

sudo gnome-text-editor /root/.bashrc

在文件结尾添加:

export PATH=$PATH:$TOOLCHAIN/bin/

其中TOOLCHAIN是编译器位置,根据自己的环境设置。保存退出,执行命令:

sudo -s
source /root/.bashrc 

 不过还是不行,最后是进入管理员运行编译命令。

sudo -s
source envsetup.sh
make clean
./autogen.sh
./configure --host=$HOST --target=$TARGET --prefix=$ANDROID_SYSROOT/usr --with-pic
make
make install

3.2 编译libusb

下载libusb,同样配置好NDK路径,可以直接拷贝envsetup.sh到libusb目录内。进入目录/android/jni,执行:

sudo $NDK/ndk-build

生成的库文件在:android/libs/$ARCH

将对应的so文件拷贝到NDK目录内:\sysroot\usr\lib,并且把文件名改为libusb-1.0.so

3.3 编译libudev

libudev已经不再维护,使用eudev(以eudev-v3.2.10为例)编译

sudo apt install xsltproc
source envsetup.sh
./autogen.sh --host $HOST
sudo ./configure --host $HOST --target $TARGET --prefix=$NDK/sysroot/usr/ --disable-blkid --disable-kmod
sudo make
sudo make install

3.3 编译libftdi

编译环境设置

mkdir build
cd build

编辑/src/CMakeLists.txt这个文件,添加libconfuse库

add_library(confuse SHARED ${c_sources})
set_target_properties(confusePROPERTIES IMPORTED_LOCATION${LIBCONFUSE_LIBRARIES}
)
target_link_libraries(confuse ${LIBCONFUSE_LIBRARIES})

在build文件夹内新建一个ndk-build.sh文件,并运行这个文件

#!/bin/shcmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \-DCMAKE_INSTALL_PREFIX="$ANDROID_SYSROOT/usr" \-DCMAKE_C_FLAGS="$CFLAGS" \-DCMAKE_CXX_FLAGS="$CXXFLAGS" \-DLIBUSB_LIBRARIES="$ANDROID_SYSROOT/usr/lib/libusb-1.0.so" \-DLIBCONFUSE_LIBRARIES="$ANDROID_SYSROOT/usr/lib/libconfuse.so" \../

编译

make

 修改android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi/asm/signal.h,去掉下面的宏定义

//#define sa_handler _u._sa_handler
//#define sa_sigaction _u._sa_sigaction

 提示错误:

/libftdi/examples/serial_test.c:152: error: undefined reference to 'signal'
/libftdi/examples/serial_test.c:171: error: undefined reference to 'signal'

虽然有错误,但是libftdi1.so和libftdi1.a已经编译好。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扩展学习|系统理解数字经济

文献来源:[1]肖静华,胡杨颂,吴瑶.成长品:数据驱动的企业与用户互动创新案例研究[J].管理世界,2020,36(03):183-205.DOI:10.19744/j.cnki.11-1235/f.2020.0041. [2]陈晓红,李杨扬,宋丽洁等.数字经济理论体系与研究展望[J].管理世界,2022,38(02):208-22413…

链表习题-力扣oj (附加思路版)

LCR 140. 训练计划 IIhttps://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号,请查找并返回倒数第 cnt 个训练项目编号。 思路:双指针,快指针先走cnt…

策略梯度网络

策略梯度网络是强化学习中的一类算法,它们直接学习一个策略,该策略可以映射从环境状态到采取的动作。与值函数方法(如Q学习和深度Q网络)不同,策略梯度方法通过优化策略本身来实现目标,即直接调整其输出动作的概率,以最大化累积奖励。这类方法的核心优势在于它们能够自然…

WinDbg无符号调试DriverEntry中断

无符号文件的驱动中断DriverEntry方法 当我们调试有符号的windows驱动时,通常可以使用bu module!DriverEntry, 在模块的DriverEntry位置打上断点。 那么对于无符号驱动,应该如何找到DriverEntry函数的位置呢? 从正常的DriverEntry的调用栈…

Java项目:40 springboot月度员工绩效考核管理系统009

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有: (1)个人中心管理功能,添加管理员账号…

多线程相关面试题(2024大厂高频面试题系列)

1、聊一下并行和并发有什么区别? 并发是同一时间应对多件事情的能力,多个线程轮流使用一个或多个CPU 并行是同一时间动手做多件事情的能力,4核CPU同时执行4个线程 2、说一下线程和进程的区别? 进程是正在运行程序的实例&#xff…

XSS靶场-初级关卡

一、环境 XSS靶场 二、闯关 1、第一关 先看源码 使用DOM型&#xff0c;获取h2标签&#xff0c;使用innerHTML将内容插入到h2中 我们直接插入<script>标签试一下 明显插入到h2标签中了&#xff0c;为什么不显示呢&#xff1f;看一下官方文档 尽管插入进去了&#xff0…

【学习资源】对比说明三个通过作者查找文献数据库(一)

最近博主在阅读相关文献的时候&#xff0c;想针对一些作者的科研文献做一个详细的了解&#xff0c;于是涉及到“如何已知作者与其所在单位&#xff0c;查找其研究成果”的问题&#xff0c;博主尝试了在Google Scholar、Web of Science、CRS核心论文库这三个地方通过作者查找文献…

程序异常结束退出 无输出 无显式报错日志 爆栈

需求 开一个很大的数组&#xff08;300万&#xff09; ❗ 错误示例 #include <stdio.h>int main() {int size 3000000;int a[size];a[size-1] 999;printf("%d",a[size-1]);return 0; }&#x1f60b; 解决方案 局部变量存储在栈空间 &#xff08;较小&…

HarmonyOS(二)Ability应用模型概述

目录 1 Ability概念 2 Ability形态 3 Stage优势 4 Stage模型结构 5 总结 注&#xff1a;本章内容提前声明。 基于HarmonyOS开发者3.1/4.0版本配套的开发者文档&#xff0c;对应API能力级别为API 9 Release。 详情可参考官网API入门第一章应用模型文档中心 1 Ability概念…

绳牵引并联机器人动态避障方法

绳牵引并联机器人在受限空间中如何躲避动态障碍物&#xff0c;是个有挑战的课题。 来自哈尔滨工业大学&#xff08;深圳&#xff09;的熊昊老师团队&#xff0c;开展了一项有趣的研究&#xff0c;论文《Dynamic Obstacle Avoidance for Cable-Driven Parallel Robots With Mob…

golang中go build 后读取配置文件

golang打包后读取配置文件 在用go写代码的时候&#xff0c;为了好用经常使用go build 打包&#xff0c;如果我们用到了配置文件&#xff0c;就总是导致不能找到文件所在位置了出现bug&#xff0c;所以以下代码就解决了这个问题。 核心代码&#xff1a; file, err : exec.Look…

Vue中的v-for中为什么不推荐使用index作为key值

在Vue中&#xff0c;我们经常会用到v-for指令来遍历数组或对象并渲染列表。而在使用v-for指令时&#xff0c;通常会需要给每个遍历的元素指定一个唯一的key值&#xff0c;以帮助Vue更高效地更新DOM。 在很多情况下&#xff0c;我们可能会倾向于使用index作为key值&#xff0c;…

易我分区大师18.2正式上线,赶紧来体验一下

近日&#xff0c;易我科技发布了易我分区大师18.2&#xff0c;该版本在功能和性能上进行了全面的升级和优化&#xff0c;为用户提供更加便捷的磁盘管理体验。 ▲ 易我分区大师18.2版本的首页 易我分区大师是一款功能强大的磁盘分区管理软件&#xff0c;它可以帮助用户轻松地管…

Promisification、微任务

前提摘要 Promise 对象的构造器&#xff08;constructor&#xff09;语法如下&#xff1a; let promise new Promise(function(resolve, reject) { // executor }); 传递给 new Promise的函数被称为 executor&#xff0c;当 new Promise 被创建&#xff0c;executor 会自动…

vite+vue3使用UEditorPlus ,后端PHP

vitevue3使用UEditorPlus 百度富文本编辑器是目前所有编辑器中功能最丰富的&#xff0c;但长时间不进行维护了。 之前写了一篇使用UEditor的教程&#xff0c;最近发现一个UEditorPlus&#xff0c;总结一下如何使用 什么是UEditorPlus 基于 UEditor 二次开发的富文本编辑器&…

猫冻干价格差距大的原因是什么?价格合理、性价比高的生骨肉冻干分享

科学养猫知识的普及&#xff0c;铲屎官们逐渐意识到了生骨肉冻干喂养的益处。然而&#xff0c;价格因素仍是部分铲屎官的阻碍。实际上&#xff0c;像我这样的资深铲屎官&#xff0c;早已认识到生骨肉冻干的价值。虽然价格略高于烘焙粮和膨化粮&#xff0c;但其对猫咪的益处是实…

四个有用的Android开发技巧

一. 通过堆栈快速定位系统版本 这个地方主要分享大家两个个技巧&#xff0c;通过问题堆栈简快速定位当前系统版本&#xff1a; 1. 快速区分当前系统版本是Android10以下&#xff0c;还是Android10及以上&#xff1b; 首先Android10及以上引入了一个新的服务Service&#xff…

13年测试老鸟,接口性能测试-压测总结汇总,一文概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、概述 性能测试…

如何禁止员工在上班时间利用电脑打游戏逛娱乐网站?

在现代化的工作环境中&#xff0c;电脑已成为员工日常工作的必需品。然而&#xff0c;一些员工可能在上班时间利用电脑进行非工作相关的活动&#xff0c;如打游戏或浏览娱乐网站。这不仅影响个人的工作效率&#xff0c;也可能对团队的整体绩效和公司的文化产生负面影响。因此&a…