环境:
Lua 5.1 + LuaSQLite3 0.9.3 + SQLite 3.12.0 + luarocks 2.3.0
Cocos2dx v3.10
Window7 64bit + VS2015
1. Lua环境搭建
http://www.lua.org/ 下载自己需要版本 。这里下5.1lua 官网:
打开VS 工具->VS命令提示
执行etc\luavs.bat (注意是\ 不是/)进入到lua的根目录
在src 会生成对应的dll,exe等
2.Luarocks
下面为蓝色字为引用大神的介绍,引用网址后面贴出
它就是一个管理Lua开源模块的工具,可以用它快速安装开源模块,譬如我用Lua封装了网络模块,提交到Luarocks,这样别人就可以快速的下载安装到他的操作系统中,甚至项目中都不必引入之类的操作,但是这点在Windows上真的是不完善的,而且即便是后来我也是不怎么会,我的作法是,把Luarocks编译好的dll文件直接放到我的项目可执行文件的同级目录,mac中会好些安装的文件直接就装在了环境变量存在的目录,不管怎样看着他的说明文档Luarocks总能很快的装到自己的操作系统中。
下载Luarocks : https://luarocks.org/
解压进入根目录 打开cmd 执行 install.bat/? 可以看到安装需要的一些配置信息
这里配置了刚刚编译的lua解释器的目录 执行 install.bat /LUA E:\lua-5.1.5\src 进行安装
安装成功后
即可进入LuaRocks的目录,一般为:C:\Program Files
在此目录控制台输入luarocks ,可看到对应信息即安装成功
3.利用LuaRocks 安装 LuaSqlite
引用:
之后就可以通过Luarocks提供的命令安装lsqlite3啦,关于那个命名坑,我这里要说一下,你如果通过这个命令安装:luarocks install luasql-sqlite3 你就大错特错了,你应该通过这个命令安装,luarocks install lsqlite3这才是你真正需要的东西。关于名称坑在那里你们体会一下吧。
安装过程在Windows上需要指定Sqlite_dir Sqlite_incdir,根据名称的意思指定正确的目录就好了,这样需求也需要你自己通过Sqlite3官网下载的东西编译一份静态库。方法就不详细说了。若是这一步在Mac上是不需要制定库目录的,实践告诉我的,呵呵。这里还要提一下,你会看到cocos有编好的sqlite3库文件,及头文件,在xxx\frameworks\cocos2d-x\external\sqlite3,最好不要用那个,因为你lsqlite3下载的是最新版本的,你的sqlite3却不用最新版本,编译过程会报一个错的,这个错很难让你想到是因为版本不匹配而造成的。
因此下面进行sqlite的配置
下载sqlite: http://sqlite.org/
下载解压,用Vs新建项目编译静态库 得到sqlite3.lib
然后执行:
luarocks install lsqlite3 SQLITE_DIR=E:/sqlite/sqlite-amalgamation-3120000 SQLITE_INCDIR=E:/sqlite/sqlite-amalgamation-3120000
安装成功:
在E:\lua-5.1.5\src\systree\lib\lua\5.1 中能看到lsqlite3.dll
4.将lsqlite3 引入自己项目
引用
因为版本的原因,请在项目目录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的函数未定义,一看就是缺少库引用。就把我们的项目中添加库引用。这样程序就能正常编译啦
最后按照大神指导进行编译,编译成功。
注: 如果报全局错误USE " cc.exports.sqlite3 = value " INSTEAD OF SET GLOBAL VARIABLE,
要在config.lua 中将CC_DISABLE_GLOBAL 置为false !
------------------------------------------------挥泪分割线------------------------------------------------------
感谢大神们经验分享,帮助了我很多,网址贴在这里
http://www.bubuko.com/infodetail-1023445.html
http://blog.csdn.net/u012735451/article/details/21693607
www.maiziedu.com/course/cocos2d-x/166-1215/
十分感谢
------------------------------------------------挥泪分割线------------------------------------------------------