Orange Pi Pc Plus编译Tensorflow 1.7.1时遇png_init_filter_functions_neon未定义错误
解决TensorFlow 1.7.1编译时
png_init_filter_functions_neon未定义的问题 你遇到的是TensorFlow编译时链接NEON优化的libpng函数失败的问题——系统默认安装的libpng没有针对你的Cortex-A7(支持NEON-vfpv4)启用NEON优化,但TensorFlow的编译逻辑会尝试调用这些NEON专用函数,最终导致链接错误。下面是几个可行的解决方案:
1. 手动编译带NEON优化的libpng
系统自带的libpng-dev是通用编译版本,没有适配你的ARM架构,需要重新编译并启用NEON:
下载适配TensorFlow 1.7.x的libpng 1.6.x源码:
wget https://download.sourceforge.net/libpng/libpng-1.6.37.tar.gz tar -xzf libpng-1.6.37.tar.gz cd libpng-1.6.37配置编译参数,指定ARM架构和NEON优化:
./configure --host=arm-linux-gnueabihf CFLAGS="-mfpu=neon-vfpv4 -mfloat-abi=hard -O3" --prefix=/usr/local编译并安装(用
-j2避免Orange Pi资源耗尽):make -j2 sudo make install更新系统库缓存:
sudo ldconfig
2. 修改TensorFlow编译命令,指定链接自定义libpng
在原有Bazel编译命令中,添加链接选项指向新安装的优化版libpng:
bazel build -c opt --compilation_mode=opt \ --copt="-mfpu=neon-vfpv4" \ --copt="-funsafe-math-optimizations" \ --copt="-ftree-vectorize" \ --copt="-fomit-frame-pointer" \ --copt="-std=gnu99" \ --linkopt="-L/usr/local/lib" \ --linkopt="-lpng" \ --local_resources 500,2.0,1.0 \ --verbose_failures \ tensorflow/tools/pip_package:build_pip_package
3. 临时禁用TensorFlow对libpng NEON优化的调用
如果前两种方案无效,可以修改TensorFlow源码跳过NEON函数调用(会损失部分性能,仅作临时方案):
- 打开
tensorflow/core/platform/png/png_io.cc文件 - 找到调用
png_init_filter_functions_neon(png_ptr);的代码段,将其注释:// png_init_filter_functions_neon(png_ptr); - 保存后重新执行原编译命令即可。
内容的提问来源于stack exchange,提问作者Bahaa
相关产品推荐
相关产品推荐

