首页 > 学院 > 开发设计 > 正文

zlib的minizip和lua 5.1.4安卓编译需要改动的地方

2019-11-08 02:09:32
字体:
来源:转载
供稿:网友

近期有一个用到了zlip的压缩和lua的dll需要编译到安卓平台下用,就使用SWIG做了转换,然后使用QT MinGW编译so文件.

swig转换很顺利.没有碰到什么问题,但是编译so确碰到了一些问题,网上查找相关资料也不是特别多,零零散散的,导致解决问题也不是很顺利,在此做下记录.

编译单纯得zlip的源码没啥问题,但是因为我里面用到了minizip来操作文件,它对于linux的编译就没有做很好的适配,将其的代码加入QT工程里面编译,会报如下错误:

/ioapi.c:127: error: undefined reference to 'fopen64'

/ioapi.c:157: error: undefined reference to 'ftello64'

/ioapi.c:203: error: undefined reference to 'fseeko64'

都是来自ioapi.c的三个函数,这里找不到对应的函数,在Linux里面其对应的是没有64 的函数 也就是将其加宏控制 

#ifdef _WINDLL#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)#define FTELLO_FUNC(stream) ftello64(stream)#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)#else#define FOPEN_FUNC(filename, mode) fopen(filename, mode)#define FTELLO_FUNC(stream) ftello(stream)#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)#endif

这样就可以编译通过了,也不影响windows端的编译.

然后是lua5.1.4的编译,

其在llex.c 的第181的localeconv()函数会报错,找不到此函数,这个返回包含本地数字及货币信息格式的数组,具体有啥用我也还不太清楚,我将其改为NULL,

然后183行的decimal_point也会没有,在Linux里面其实就是点,所以只需改为如下:

#ifdef _WINDLL  struct lconv *cv = localeconv();  char old = ls->decpoint;  ls->decpoint = (cv ? cv->[0] : '.');#else  struct lconv *cv = NULL;  char old = ls->decpoint;  ls->decpoint = '.';#endif

即可编译通过,经测试我用到的的功能也没有受到影响.


上一篇:文章标题

下一篇:语句-综合练习题目

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表