本文目录 环境 └─ PSDK版本 └─ 相关软件/固件版本 └─ 测试环境 技巧详解 └─ 1.问题分析 └─ 2.解决思路 └─ 3.下载zlib源码-交叉编译 └─ 4.附件 环境
技巧详解 1.问题分析 在PSDK的源码中包含了zconf.h的头文件,zconf.h 属于zlib,该库是提供数据压缩用的函式库,使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。由于该函数库并不是GNU GCC标准函数库,因此在其编译工具链不包含该库,如果对PSDK的linux平台进行移植和交叉编译时会就遇到找不 zconf.h问题。 2.解决思路 思路一:直接屏蔽。该方法简单粗暴,直接注释报错的位置,PSDK 2.0 应该就两个位置,再编译即可成功。当然这个方法不是很推荐,因为后续可能会用到库的API。 思路二:找现成的lib库。从开发板/IC厂家提供的资料包获取lib库(如果有),或者网上找别人已经编译好的lib库,当然需要与你的开发板架构/编译工具链相匹配。(本文也有附赠,如附件提供的arm v7) 思路三:下载zlib源码自己编译。此函数库为自由软件,使用zlib授权,可以到zlib官网 http://www.zlib.net/ 下载源码进行编译/交叉编译(本文附件也有提供)。 3.下载zlib源码-交叉编译 1. 下载 zlib-1.2.11.tar.gz (截止发稿前的最新版本) 到gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/libc/usr/下,gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi是你开发平台所使用的交叉编译工具链,不同平台名称会不一样。 2. cd zlib-1.2.11/ 3. ./configure --prefix=../ 4. vim Makefile zlib库提供的configure配置不支持配置编译器,因此需要手动更改Makefile,修改内容如下: 4-1 这里我们只需要编译静态库,因此将 all: static shared all64 改为 all: static # shared all64 (类似./configure --static) 4-2 修改编译器:静态库没有用到CPP和LDSHARED功能,因此只要修改CC,如下: CC=gcc 改为 CC=/opt/toolchain/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc 4-3 接着,修改库生成命令(ar),如下: AR=ar 改为 AR=/opt/toolchain/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-ar 4-4 最后,生成库之后要更新库文件符号索引表,修改ranlib: RANLIB=ranlib 改为 RANLIB=/opt/toolchain/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-ranlib 5. make all 6. make instal 确认是否成功生成lib库的头文件, find../ -name "zconf.h" 7. 将最后生成libz.a 以及 zlib.h zconf.h拷贝到所需目录下即可 cp libz.a ../lib cp zconf.h ../include/ 8. 最后可以将这个zlib包删除掉,编译PSDK代码包 cmake-DCMAKE_BUILD_TYPE=Release .. make 4.附件 附赠,zlib-1.2.11.tar.gz zlib源码。
附赠,zlib-1.2.11_cross-compilation.zip zlib交叉编译后的lib库和头文件,适用环境如上文。 此篇文章分享自张小龙,如果您有什么疑问或者建议欢迎回复讨论~ 欢迎点赞哦! |
欢迎光临 大疆社区 (https://bbs.dji.com/) | Powered by Discuz! X3.2 |