arm linux 交叉编译libiio库

参考:https://blog.youkuaiyun.com/Q1302182594/article/details/44854207?utm_source=blogxgwz8

 

先在虚拟机里下载安装这些(推荐ubuntu,软件资源丰富一点)

sudo apt-get install libxml2 libxml2-dev bison flex libcdk5-dev cmake

 

 

1、下载libiio libxml2 libz源码

libiio下载:https://github.com/analogdevicesinc/libiio

libxml2下载:ftp://xmlsoft.org/libxml2/

libz下载:https://github.com/MiloszKrajewski/LibZ

 

2、交叉编译libxml2

https://blog.youkuaiyun.com/fanwenjieok/article/details/52848092

记录下生成的lib/*so文件路径,,后面会用到

3、交叉编译libz

https://www.cnblogs.com/Jacket-K/p/7374187.html

记录下生成的lib/*so文件路径,,后面会用到

 

4、创建文件:toolchainfile.cmake

 

    交叉编译libiio,需要使用到cmake。cmake此时需要一个toolchainfile.cmake文件(改为其它名字也行),根据参考资料[2]的说明, 编辑toolchainfile.cmake的内容如下:

toolchainfile.cmake 最好放在libiio源码路径下

# this one is important

SET(CMAKE_SYSTEM_NAME Linux)

 

#this one not so much

SET(CMAKE_SYSTEM_VERSION 1)

 

# specify the cross compiler 这里添加交叉编译链工具的路径

SET(CMAKE_C_COMPILER/root/MYD-Y6ULX/Tools/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)

SET(CMAKE_CXX_COMPILER /root/MYD-Y6ULX/Tools/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

 

# where is the target environment 这里最好把需要的这些文件的路径全部包含进去

SET(CMAKE_FIND_ROOT_PATH / /home/libiio/ /root/MYD-Y6ULX/Tools/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/ /home/libz/)

 

# search for programs in the build host directories

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

#SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)

 

# for libraries and headers in the target directories

SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

#SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

 

5、在源码路径下创建config.sh脚本

#!/bin/bash TOOLCHAIN_PATH=/home/libiio/ cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_PATH}/toolchainfile.cmake .

说明:TOOLCHAIN_PATH是创建toolchainfile.cmake的目录。

 

 

6、执行./config.sh

可能会遇到下列问题

Could NOT find LibXml2 (missing: LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR)

 

问题:LIBXML2_INCLUDE_DIR

经过查看发现上述的两个目录中都没有libxml头文件,所以出现了missing:LIBXML2_INCLUDE_DIR的错误。

    解决这个问题的办法有2种:

1)将ubuntu的libxml头文件路径添加到CMAKE_FIND_ROOT_PATH中;

2)注释掉下面的设定,使得cmake搜索头文件的路径不受限制:

#SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

 

问题:LIBXML2_LIBRARIES     

 

    经过查找发现/home/libxml2/中是包含有libxml库文件的。经过测试发现,libxml库的文件名(libxml2.so.2.8.0)有点问题。重新创建一个libxml2.so到libxml2.so.2.8.0的软连接,问题解决。在之后出现的PTHREAD_LIBRARIES问题,用同样的办法解决。

 

7、执行 cmake ./

问题:libxml2.so.2, needed by ../libiio.so.0.5, not found (try using -rpath or -rpath-link)

 

在指定的目录中已经包含了libxml2.so.2,但是这里却提示找不到!

解决方法1

    将libxml2.so及其所链接的文件复制到libxml2源码目录中,然后再编译,即可通过。

解决办法2

    在CMakeCache.txt中找到CMAKE_EXE_LINKER_FLAGS变量,将其值设为:

CMAKE_EXE_LINKER_FLAGS:STRING= -L/home/libxml2//lib -lxml2 -L /home/libz/lib -lz

 

8、make

如果报错:再检查一下CMakeCache.txt关于libxml2的一些路径,如果不是你交叉编译的路径都改过来。

 

9、make install

将生成三个*so文件

 

10、移植到arm板

将上面交叉编译的三个库生成的*so文件全部拷贝到板子的 /usr/lib/路径下。

检查一下格式是否为arm格式。

 

11、编写自己的应用程序的时候指定库路径

# -l指定静态库名字

LIB = -lpthread -lm -L/root/sqlite3 -lsqlite3 -lrt \

-L/home//libiio/libiio -liio\

-L/home/libxml2/lib -lxml2 \

-L/home/liblz/lib -lz

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### 对 `libiio` 进行交叉编译 为了对 `libiio` 进行交叉编译,可以遵循一系列特定的操作流程。这些操作不仅适用于一般的文件,也特别适合于嵌入式开发环境中的应用。 #### 准备工作 确保已经安装了合适的交叉编译工具链。对于 ARM 架构的目标平台,通常会选择 Linaro 提供的工具链版本之一。例如,在命令中可以看到使用的是 `arm-linux-gnueabihf-gcc` 编译器[^1]。这表明目标架构为支持硬浮点ABI (Application Binary Interface) 的ARM处理器。 #### 获取源码 下载最新的 `libiio` 源代码包。可以从官方GitHub仓获取最新稳定版或指定版本标签下的压缩包。解压后进入对应的目录准备配置构建过程。 #### 配置构建选项 在执行实际编译前,需通过运行 configure 脚本来设置必要的参数以适应不同的硬件平台需求: ```bash ./bootstrap.sh # 如果存在此脚本,则先初始化项目结构 mkdir build && cd build ../configure \ --host=arm-linux-gnueabihf \ --build=x86_64-pc-linux-gnu \ --prefix=/usr/local \ CC="arm-linux-gnueabihf-gcc" \ CXX="arm-linux-gnueabihf-g++" ``` 这里指定了主机(host)为目标体系结构(`arm-linux-gnueabihf`)以及当前机器(build)的信息;同时设置了安装路径(prefix),并显式定义了C/C++编译器名称以便正确调用交叉编译工具链。 #### 执行编译与安装 完成上述准备工作之后就可以开始正式编译了: ```bash make -j$(nproc) DESTDIR=$HOME/staging make install ``` 第一条指令利用多线程加速编译速度(-j 参数后面跟上可用CPU核心数),第二条则是在本地临时根目录下模拟最终系统的布局来进行安装动作,这样做的好处是可以方便后续打包或者测试验证。 #### 测试验证 最后一步是对生成的结果进行功能性和兼容性的检测。可以通过编写简单的应用程序来加载动态链接(.so 文件), 或者直接尝试运行一些依赖该的应用实例来看看是否存在任何问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值