Tensorflow交叉编译错误集锦
Posted jimchen1218
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tensorflow交叉编译错误集锦相关的知识,希望对你有一定的参考价值。
前言:
Tensorflow交叉编译的过程是一个心塞的过程,其中可能会出现各种各样你想不到的错误。。。,个中滋味,只有经历过的人才能体会。
特意记录下所有碰到的问题,一来作为这段时间的一个小结,二来可以给他人提供些帮助。
正文:
现将已知问题列表如下,如碰到相同现象,可依此方法解决:
问题1:
错误现象:
编译过程中,提示exp("/home/jim/tf2arm/sysroots/x86_64-linux/arm-poky-linux-gnueabi-gcc") :no such file or directory
原因分析:
我在该目录下可以该目录,但是打开shell运行时,提示却一样:no such file or directory。(这个交叉编译SDK是从别人电脑(UBUNTU系统版本14.04)上拷 贝过来了,在他的电脑上可以正常执行),原因可能是由于系统与平台的差异性,导致在一台电脑上可以正常执行,在另一台电脑上却无法执行。
百度查了各种方法:
1) chmod 777 -R sysroots 添加可执行权限,不行
2) sudo apt-get install lsb-core 添加对32位系统的兼容支持,不行
3) sudo apt-get install ia32-libs 添加对32位系统的兼容支持,不行
解决方法:
用别人生成的SDK不行,那个自己编译一个,方法可参考如下链接:手动编译用于i.MX6系列的交叉编译SDK
问题2:
错误现象:
拷贝新生成的两个可执行包到相应目录:
opt/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poly-linux-gnueabi
opt/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc
再次编译bash build_arm_poky.sh
报错:error:target CPU does not support ARM mode
原因分析:
查看目标芯片参数:Cortex-M4对应ARMv7E-M,也就是-march=armv7-a ,-mtune=cortex-a9
如果使用--mcpu=cortex-m3选项时,需要与-mthumb选项搭配。未解决!
通过报错时的提示信息,发现:环境变量里有两条记录:-march=armv7-a和-march=armv7
解决方法:
执行脚本 :./configure
其它的选项都选No,-march选项使用armv7-a即可。
问题3:
问题现象:
cortexa9hf-neon-poky-linux-gnueabi/usr/include/gnu/stubs.h:7:29:fatal error: gnu/stubs-soft.h :No such file or directory
compilation terminated
原因分析:
在编译生成的包中未查找到该文件,但找到一个类似文件:stubs_hard.h,查看该文件内容,只是些宏定义。
解决方法:
直接复制文件stubs-hard.h,更名为为stubs-soft.h
问题4:
现象:
extern/asm/nasm/error.c,找不到error.h
原因分析:
源代码查找error.h, 位于extern/asm/include,应该是编译路径包含不对导致。
解决方法:
比较土:找到当前路径,直接复制到当前文件:cp include/error.h .
问题5:
ld:找不到文件:ctri.o
原因分析:
当前源代码包中有该文件
解决方法:
sudo chmod 777 -R sysroots
问题6:
BUILD:bazel:8:1:undeclared inclusion(s) in rule ‘‘
解决方法:
bazel clean --expunge
问题6:
BUILD:tensorflow/WORKSPACE:3:1:name ‘http_archive‘ is not defined
原因分析:
怀疑是包不兼容导致,当前bazel 0.25.2,tensorflow 1.10
解决方法:
当前tensorflow 1.10最高只能支持Bazel0.19.2,所以,降Bazel版本到0.18.1
1.
tensorflow/python/lib/core/py_func.cc:355:39 :error: invalid conversion from ‘const char*‘ to ‘char*‘ [-fpermissive]
找到错误处,在接口返回值处添加(char *)
external/gif_archive/lib/egif_lib.c:62:6:error:‘S_IREAD‘ undeclared(first use in this function)
修改S_IREAD为S_IRUSR
external/gif_archive/lib/egif_lib.c:62:16:error:‘S_IWRITE‘ undeclared(first use in this function)
修改S_IWRITE为S_IWUSR
或:在gif_lib.h中定义
#define S_IREAD S_IRUSR
#define S_IWRITE S_IWUSR
错误原因可能是没有编译android,因为在external/gif_archive下BUILD.bazel里有定义
2 external/png_archive/pngpriv.h:911:4 :error:#error ZLIB_VERNUM!= PNG_ZLIB_VERNUM " -I (include path) error:see the notes in pngpriv.h
#error ZLIB_VERNUM != PNG_ZLIB_VERNUM
Zlib库与libpng版本号不一致
查看Zlib版本:
find /usr/ -name zlib.pc 搜索结果:/usr/lib/x86_64-linux-gnu/pkgconfig/zlib.pc
cat /usr/lib/x86_64-linux-gnu/pkgconfig/zlib.pc 版本信息会显示出来 当前版本是Version:1.2.8
查看libpng版本:
find /usr/ -name libpng (当前版本1.2)
与Zlib:1.2.8之对应的libpng版本应该是1.5,
安装libpng:
下载地址: https://sourceforge.net/projects/libpng/files/
tar -xzvf libpng-1.5.30.tar.gz
cd libpng-1.5.30.tar.gz
./configure
make check
sudo make install
sudo ldconfig
以上是关于Tensorflow交叉编译错误集锦的主要内容,如果未能解决你的问题,请参考以下文章