libftdi库编译

news2024/10/25 14:33:29

目录

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-strip

export 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(
        confuse
        PROPERTIES IMPORTED_LOCATION
        ${LIBCONFUSE_LIBRARIES}
)
target_link_libraries(confuse ${LIBCONFUSE_LIBRARIES})

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

#!/bin/sh

cmake -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.coloradmin.cn/o/1497518.html

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

相关文章

开源文生图大模型Playground v2.5发布:超越SD、DALL·E 3和 Midjourney

前言 在AI技术迅速发展的今天,文生图模型成为了艺术创作、设计创新等领域的重要工具。Playground v2.5的发布,不仅在技术上取得了突破,更在开源文化的推广与实践上迈出了重要一步。 Huggingface模型下载:https://huggingface.co/…

一文读懂 Databend 的开放表格式引擎

本文介绍了 Databend 开放表格式引擎的支持情况,包括优势与不足、使用方法、与 Catalog 方案的对比。此外,还包含一个简单的 Workshop ,介绍如何利用 Databend Cloud 分析位于对象存储中的 Delta Table 。 Databend 近期发布 Apache Iceberg …

如何排查合并问题——《OceanBase诊断系列》之七

1. 前言 OceanBase数据库的存储引擎以 LSM-Tree 架构为基础,区分静态基线数据(存储在只读SSTable)和动态增量数据(存储在可读写MemTable)。其中 SSTable 是只读的,一旦生成就不再被修改,存储于…

每日OJ题_链表①_力扣2. 两数相加

目录 力扣2. 两数相加 解析代码 力扣2. 两数相加 2. 两数相加 难度 中等 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个…

MyBatis-Flex学习总结

写在前面的话 MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性…

VPN应用场景典型案例-站点到站点组网应用

组网需求 站点到站点IPSEC隧道也是LAN -to -LAN IPSec描述的是两个局域网之间建立IPSec隧道的概念,建立站到站IPSec隧道时,两个专用网络之间跨越一个公用网络,这样就可以实现私有网络A:192.168.0.0/24到私有网络B:192.168.1.0/24之间的安全通信。以下是该典型环境的组网图…

【MOMO_Tips】批量将word转换为PDF格式

批量将word转换为PDF格式 1.打开文件–>选项–>自定义功能区–>开发工具–>确定 2.点开开发工具,选择第一个visual basic 3.进入页面后找到插入–>模块,就可以看到这样的画面之后将下列vba代码复制粘贴到模块中 Sub ConvertWordsToPd…

MySQL 存储过程(超详细)

一、什么是存储过程? 存储过程可称为过程化SQL语言,是在普通SQL语句的基础上增加了编程语言的特点,把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中,通过逻辑判断、循环等操作实现复杂计算的程序语言。换句话说&#xff0c…

私域做不下去的三大因素

私域运营是近年来的一大热门话题,从线下门店到日常外卖、线上购物,几乎所有的企业都在借助微信等社交媒体平台进行推广。然而,据统计,近90%的私域运营最后都不了了之。 原因1:在于企业对私域的认知不足,营…

【重温设计模式】迭代器模式及其Java示例

迭代器模式的介绍 在编程领域,迭代器模式是一种常见的设计模式,它提供了一种方法,使得我们可以顺序访问一个集合对象中的各个元素,而又无需暴露该对象的内部表示。你可以把它想象成一本书,你不需要知道这本书是怎么印…

C语言学习--练习2

目录 1.排序数组 2.多数元素 3.存在重复元素 4.最大间距 5.按奇偶排序数组 6.最小时间差 1.排序数组 /*** Note: The returned array must be malloced, assume caller calls free().*/ int cmp(const void*a,const void*b){return *(int*)a-*(int*)b; } int* sortArray(i…

常见的几种echarts类型

一:折线图 let option {tooltip: {},animation: false,grid: {top: "20%",bottom: "33%", //也可设置left和right设置距离来控制图表的大小left: 5%,right: 5%},xAxis: {boundaryGap:false,data: [1,2,3,4,5],axisLine: {show: true, //隐藏X轴…

MedSAM 项目排坑记录

MedSAM 项目排坑记录 任务排坑过程配置python环境测试构建docker模型训练数据预处理 单GPU训练最后推理 任务 做一个课程大作业,需要进行CVPR2024年医疗影像分割赛题的打榜(CVPR 2024: SEGMENT ANYTHING IN MEDICAL IMAGES ON LAPTOP)。看到…

实现消息队列(Kafka、ActiveMQ、RabbitMQ和RocketMQ)高可用

概述 单机没有高可用可言,高可用都对集群来说的 要保证消息队列系统(如Kafka、ActiveMQ、RabbitMQ和RocketMQ)的高可用性,可以采取以下一些通用的措施: 集群部署:将消息队列系统部署为集群,包…

音视频学习笔记——TCP网络原理

✊✊✊&#x1f308;大家好&#xff01;本篇文章主要记录自己在进行音视频学习中&#xff0c;整理的包括可靠传输、流量控制、拥塞控制等部分TCP网络原理相关的内容重点&#x1f607;。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;…

一个平台满足你对测试工具的所有需求

背景 目前&#xff0c;测试人员普遍使用的测试工具有Postman、JMeter等&#xff0c;但这些工具都存在一定的局限性。例如&#xff0c;Postman缺少对API性能测试方面的支持&#xff0c;而JMeter则缺乏一个整合测试报告、测试脚本的统一管理系统以及UI测试功能。 RunnerGo是什么…

常用的几种concrt140.dll丢失的解决方法,关于concrt140.dll修复教程

concrt140.dll是Microsoft Visual Studio 2015&#xff08;或更高版本&#xff09;中包含的一个动态链接库文件&#xff0c;它是C运行时库的一部分&#xff0c;主要用于支持并行计算、并发处理等功能。当你的应用程序需要执行多线程操作或者使用了C的并发库时&#xff0c;就会依…

windows下编译boost1.84.0库

boost系列文章目录 文章目录 boost系列文章目录前言一、boost编译二、boost使用三 、参考 前言 Boost简介 官方网址 Boost提供免费的同行评审的可移植C源代码库。 我们强调与C标准库配合良好的库。Boost库旨在广泛使用&#xff0c;并可在广泛的应用程序中使用。Boost许可证鼓…

AI预测福彩3D第4弹【2024年3月7日预测】

经过前面几次的预测&#xff0c;7码命中率已经有了明显提高&#xff0c;今天&#xff0c;继续咱们的预测。 老规矩&#xff0c;先给各位展示下百十个的神经网络蒙特卡洛统计频次图及部分号码的冷温热走势图。 最终&#xff0c;经过研判分析&#xff0c;2024年3月7日福彩3D的七…

TikTok矩阵获客软件的核心源代码是什么?

随着互联网的不断发展&#xff0c;社交媒体已成为企业获客的重要渠道之一&#xff0c;在众多的社交媒体平台中&#xff0c;TikTok凭借其庞大的用户群体和活跃的社交氛围&#xff0c;成为了众多企业竞相争夺的营销高地。 在这样的背景下&#xff0c;TikTok矩阵获客软件应运而生…