大疆社区

标题: 【小龙分享】解决PSDK交叉编译找不到zconf.h问题 [打印本页]

作者: 张小龙    时间: 2020-5-11
标题: 【小龙分享】解决PSDK交叉编译找不到zconf.h问题
本帖最后由 张小龙 于 2020-5-11 20:03 编辑

本文目录
环境
  └─ PSDK版本
  └─ 相关软件/固件版本
  └─ 测试环境
技巧详解
  └─ 1.问题分析
  └─ 2.解决思路
  └─ 3.下载zlib源码-交叉编译
  └─ 4.附件


环境
  • PSDK版本:
  •    Payload SDK V2.0.0-build.138
  • 相关软件/固件版本:
  •     X-Port: V01.00.0000
  •     Skyport V2 Adapter: V01.00.0000
  •     Matrice 200 V2 Series: V01.00.0650
  •     GL900A Remote Controller: V01.00.0650
  •     iOS MSDK : V4.12_m300rtk.b1
  •     Android MSDK: V4.12_m300rtk.b1
  •     DJI Pilot: V1.7.0
  •     DJI Assistant 2 For Matrice: V2.0.11
  • 测试环境:
  •     arm v7/v8架构的linux开发板
  •     x86_64架构的ubutnu16.04主机

技巧详解
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.tar.gz (593.46 KB, 下载次数: 137)
附赠,zlib-1.2.11_cross-compilation.zip zlib交叉编译后的lib库和头文件,适用环境如上文。
zlib-1.2.11_cross-compilation.zip (82.72 KB, 下载次数: 141)


此篇文章分享自张小龙,如果您有什么疑问或者建议欢迎回复讨论~ 欢迎点赞哦!






欢迎光临 大疆社区 (https://bbs.dji.com/) Powered by Discuz! X3.2