arm linux 交叉编译libiio库

参考:https://blog.csdn.net/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.csdn.net/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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值