安装Libpng
这篇文章写得很清楚,照着安装没啥问题。
https://blog.youkuaiyun.com/weixin_38176039/article/details/82020865
一些问题
1.在运行POM的C语言版本程序时,需要先安装Libpng,然后运行POM安装程序出现下面报错。
/usr/local/include/png.h:458:16: note: forward declaration of ‘png_info {aka struct png_info_def}’
typedef struct png_info_def png_info;
src/rgb_image.cc:220:50: error: invalid use of incomplete type ‘png_info {aka struct png_info_def}’

查找了网上资料,有可能是引用第三方库的问题,也有可能是版本问题,总之不好使。于是我修改了POM源码,在rgb_image.cc中,这种info_ptr->rowbytes的指针全部改为调用Libpng的函数。例如,
// _width = info_ptr->width;
_width = png_get_image_width(png_ptr, info_ptr);
// _height = info_ptr->height;
_height = png_get_image_height(png_ptr, info_ptr);
// color_type = info_ptr->color_type;
color_type = png_get_color_type(png_ptr, info_ptr);
// bit_depth = info_ptr->bit_depth;
bit_depth = png_get_bit_depth(png_ptr, info_ptr);
// channels = info_ptr->channels;
channels = png_get_channels(png_ptr, info_ptr);
问题得到解决。成功编译。
2.在运行https://github.com/YaluLiu/POM的main.py时,出现引用错误“ModuleNotFoundError: No module named ‘parsepom’”,猜想应该是上一步的环境没有配置好。
首先上一步make成功之后,项目文件夹里会多一个parsepom.cpython-36m-x86_64-linux-gnu.so的文件;将这个文件放进你的环境文件夹里,例如我的“/home/fair/anaconda3/envs/zls_pom/lib/python3.7/site-packages”里面,另外,由于我用的是python3.7,因此文件名要修改一下,不然找不到:parsepom.cpython-37m-x86_64-linux-gnu.so,这样就可以了。
参考文献
[1] https://blog.youkuaiyun.com/weixin_34121304/article/details/85900399
[2] https://www.cnblogs.com/z1141000271/p/10289365.html
在尝试运行POM C语言版本时,遇到与Libpng的兼容性问题,通过修改POM源码,用png_get_*系列函数替换直接访问png_info结构体字段,成功编译。对于Python版本的POM,出现'parsepom'模块找不到的错误,将编译生成的.so文件放入Python环境的site-packages目录并调整文件名为对应版本,解决了问题。
1881

被折叠的 条评论
为什么被折叠?



