Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2d-x 3.2 Lua项目通过LuaSQLite3使用Sqlite3问题总结大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

首先说明一下环境

cocos2d-x v3.2

为什么要用这个版本,是因为在项目开始决策的时候我并未处在客户端决策层,因为我是搞服务器的,所以后来只能继续沿用这个版本,至少这个项目是的

Windows 7 64位Visual studio 2013

这个开发环境,经过这个需求的验,让我越来越失望


这里说明一下需求

很简单的程序,不多说,需要有个配置管理的模块,譬如你进行多少关,现在多少级,数据不多不少,总不能自己定配置文件格式,解析等等,用userdefalut吧,太不成熟的一个东西,然用过,但这一次还是想尝试一下新东西,sqlite轻量型数据库。

请耐心一步一步的看我的经历,或许以后就节省你若干时间,再或许这里就有你问题的解决方案

需求很明确了,我总是要在lua层操作sqlite的,这点有开源的模块:http://lua.sqlite.org/index.cgi/index

做程序要熟悉一个开源项目,肯定要从说明文档入手啦,它在它的说明文档里在安装一栏提到了这点

Luarocks (http://luarocks.org/) is the preferred mechanism to build and install lsqlite3; it assumes an sqlite3 library is already installed.

大致意思就是它推荐你用Luarocks安装lsqlite3,注意哦,这个名字也坑了我好长时间的,后面再说

这里就只能开始再硬着头皮学Luarocks,目前我对它的理解是,它就是一个管理Lua开源模块的工具,可以用它快速安装开源模块,譬如我用Lua封装了网络模块,提交到Luarocks,这样别人就可以快速的下载安装到他的操作系统中,甚至项目中都不必引入之类的操作,但是这点在Windows上真的是不完善的,而且即便是后来我也是不怎么会,我的作法是,把Luarocks编译好的dll文件直接放到我的项目可执行文件的同级目录,mac中会好些安装的文件直接就装在了环境变量存在的目录,不管怎样看着他的说明文档Luarocks总能很快的装到自己的操作系统中。

之后就可以通过Luarocks提供的命令安装lsqlite3啦,关于那个命名坑,我这里要说一下,你如果通过这个命令安装:luarocks install luasql-sqlite3 你就大错特错了,你应该通过这个命令安装,luarocks install lsqlite3这才是你真正需要的东西。关于名称坑在那里你们体会一下吧。

安装过程在Windows上需要指定@R_857_5607@dir @R_857_5607@incdir,根据名称的意思指定正确的目录就好了,这样需求也需要你自己通过sqlite3官网下载的东西编译一份静态库。方法就不详细说了。若是这一步在Mac上是不需要制定库目录的,实践告诉我的,呵呵。这里还要提一下,你会看到cocos有编好的sqlite3库文件,及头文件,在xxx\frameworks\cocos2d-x\external\sqlite3,最好不要用那个,因为你lsqlite3下载的是最新版本的,你的sqlite3却不用最新版本,编译过程会报一个错的,这个错很难让你想到是因为版本不匹配而造成的。

便你通过了上面的所有磨砺,你依然会在最后一步,止步不前。因为你要打包了,你有dll文件,你也有so文件,但那都是通过操作系统使用的,手机能用不能呢,实践告诉我,即使我把so文件当做资源打包到android上,路径不错的情况下,我还是无法使用它,过多的尝试和朋友的话,就让我前面的努力都夭折了,你的动态库是用gcc编译的,即便你手机程序能加载,也用不了,必须用NDK编译,不管怎样的方法,这一步是少不了的。

其实要想在项目里支持操作sqlite,原没有那么麻烦,现在我就把现在用的方法再说一遍

首先你要先看这篇文章:http://www.voidcn.com/article/p-rvrynitk-eq.html

它加密相关的操作,你暂时可以先忽略,主体操作都是大同小异,我在这里写上我的详细做法

因为版本的原因,请在项目目录xxx\frameworks\cocos2d-x\external\lua里创建lsqlite3目录

解压(分别都是在官网下载的最新版本)

lsqlite3_fsl09w.zip

sqlite-amalgamation-201507231639.zip

将解压出来的源文件和头文件

sqlite3ext.h

sqlite3.h

sqlite3.c

lsqlite3.c

拷贝到文件夹中

在目录中新建lsqlite3.h头文件

#ifndef __LsqlitE3_H__
#define __LsqlitE3_H__

#include "lauxlib.h"

LUALIB_API int luaopen_lsqlite3(lua_State *L);

#endif
修改lsqlite3.c文件增加如下两行,包含刚才新建的头文件及sqlite3的头文件

#include "lsqlite3.h"
#include "sqlite3.h"

修改xxx\frameworks\cocos2d-x\cocos\scripTing\lua-bindings\manual\lua_extensions.c文件,修改如下

#include "luasocket/luasocket.h"
#include "luasocket/mime.h"
#include "lsqlite3/lsqlite3.h"

static luaL_Reg luax_exts[] = {
    {"socket.core",luaopen_socket_corE},{"mime.core",luaopen_mime_corE},{"lsqlite3",luaopen_lsqlite3},{NULL,NULL}
};

在VS2013中打开解决方案,找到liblua项目,新建lsqlite筛选器,里面添加-现有项,把新建目录lsqlite3中的头文件及源文件均添加进去,生成项目,应该不会存在问题,其实若是不打包及跨平台的话(怎么可能)你还可以这样操作,你就不用下载sqlite3了,直接用cocos2dx提供的sqlite3版本,xxx\frameworks\cocos2d-x\external\sqlite3,这样就要求你在lsqlite3.cpp中包含sqlite3.h的目录要改一下,这时,你的liblua项目就可以仅添加lsqlite3.h和lsqlite3.cpp文件啦,这样liblua是可以编译通过的,但是编我们项目的时候会报sqlite3的函数未定义,一看就是缺少库引用。就把我们的项目中添加库引用。这样程序就能正常编译啦

这个时候若是打包呢,我android包习惯用cocos compile方法,首先说明的是如果用上面第二个方案,打包肯定是很困难的,至少我没有方案,因为我不知道该如何方便在Android.mk引入sqlite3的动态链接库,即便是引入我想后面应该也有很多坑吧,所以一开始把sqlite3编到自己项目里总是明智的,当命令行编译的时候,肯定会报错,因为你还没有把你新增的源文件添加到android.mk中呢,添加后就应该不会有什么大问题了吧。

          ../../../external/lua/lsqlite3/lsqlite3.c \
          ../../../external/lua/lsqlite3/sqlite3.c \

我的总结性文章一般都是事后写,这样我有时可能仅关注了关键性操作,一些小问题,百度一下,思一下解决的东西,我可能都不怎么写了,因为已经忘记了,望见谅

大佬总结

以上是大佬教程为你收集整理的Cocos2d-x 3.2 Lua项目通过LuaSQLite3使用Sqlite3问题总结全部内容,希望文章能够帮你解决Cocos2d-x 3.2 Lua项目通过LuaSQLite3使用Sqlite3问题总结所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。