Ubuntu20编译Blender Python模块时libpng.a报-fPIC链接错误如何解决
问题修复方案
错误原因
第一个链接错误是系统预装的静态库
libpng.a编译时未添加-fPIC(位置无关代码)参数,无法被链接到动态加载的Python模块bpy中。直接将-fPIC加在make命令后是错误用法,make会把-fPIC拆成-f PIC识别为要找名为PIC的makefile,因此会报找不到规则的错误。
方案1:优先推荐,无需手动编译libpng
- 安装系统动态libpng开发包,非root用户执行时前面加
sudo:apt install libpng-dev - 进入Blender的构建目录,清理之前的构建缓存:
make clean - 重新配置CMake,添加编译器PIC参数,指定优先使用动态libpng:
cmake .. \ -DWITH_PYTHON_MODULE=ON \ -DCMAKE_C_FLAGS="-fPIC" \ -DCMAKE_CXX_FLAGS="-fPIC" \ -DPNG_LIBRARY=/usr/lib/x86_64-linux-gnu/libpng.so
- 重新编译bpy:
make bpy -j$(nproc)
方案2:手动编译带PIC的libpng(方案1失效时使用)
- 安装libpng编译依赖,非root用户执行时前面加
sudo:apt install build-essential zlib1g-dev - 下载Ubuntu 20对应版本的libpng源码:
apt source libpng16-16 - 进入解压后的libpng源码目录,执行配置开启PIC支持:
cd libpng1.6.37* ./configure --enable-static --with-pic=yes --prefix=/usr/local/libpng-fpic
- 编译安装,非root用户执行时前面加
sudo:make -j$(nproc) && make install - 回到Blender构建目录,重新配置CMake指定使用自定义编译的libpng:
cmake .. \ -DWITH_PYTHON_MODULE=ON \ -DCMAKE_C_FLAGS="-fPIC" \ -DCMAKE_CXX_FLAGS="-fPIC" \ -DPNG_ROOT=/usr/local/libpng-fpic
- 重新编译bpy:
make bpy -j$(nproc)
内容的提问来源于stack exchange,提问作者pookie
相关产品推荐
相关产品推荐

