关于POM程序和Libpng使用中出现的一些问题

在尝试运行POM C语言版本时,遇到与Libpng的兼容性问题,通过修改POM源码,用png_get_*系列函数替换直接访问png_info结构体字段,成功编译。对于Python版本的POM,出现'parsepom'模块找不到的错误,将编译生成的.so文件放入Python环境的site-packages目录并调整文件名为对应版本,解决了问题。

安装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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值