热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Cocos2d-x3.2Lua项目通过LuaSQLite3使用Sqlite3问题总结

首先说明一下环境cocos2d-xv3.2为什么要用这个版本,是因为在项目开始决策的时候我并未处在客户端决策层,因为我是搞服务器的,所以后来只能继续沿用这个版本,至少这个项目是的W

首先说明一下环境

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

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

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

首先你要先看这篇文章:http://blog.csdn.net/costa100/article/details/20050561

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

因为版本的原因,请在项目目录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 \

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




推荐阅读
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • 在 CentOS 6.6 系统中搭建 MONO 和 Jexus 以支持 ASP.NET 及 MVC 应用的运行环境配置指南
    本文提供了在 CentOS 6.6 系统上配置 MONO 和 Jexus 以支持 ASP.NET 及 MVC 应用的详细步骤。首先,确保本机环境为 CentOS 6.6,并使用阿里云的 YUM 源来安装必要的软件包,包括 gcc、gcc-c++、bison、pkgconfig 和 glib2-devel。这些软件包是构建和运行 MONO 环境的基础,确保系统能够顺利支持 ASP.NET 和 MVC 应用的部署和运行。 ... [详细]
  • 本文深入探讨了 hCalendar 微格式在事件与时间、地点相关活动标记中的应用。作为微格式系列文章的第四篇,前文已分别介绍了 rel 属性用于定义链接关系、XFN 微格式增强链接的人际关系描述以及 hCard 微格式对个人和组织信息的描述。本次将重点解析 hCalendar 如何通过结构化数据标记,提高事件信息的可读性和互操作性。 ... [详细]
  • 在CentOS上部署并使用FFmpeg多媒体处理工具
    最近在进行音频处理时需要用到FFmpeg,本文将详细介绍如何在CentOS系统上部署并使用这一强大的多媒体处理工具。首先,从官方网站下载FFmpeg的最新版本,然后通过Xftp工具将下载的压缩包(如ffmpeg-4.3.1.tar.xz)传输到服务器上。接下来,解压文件并按照官方文档进行编译安装。安装完成后,可以通过命令行工具验证FFmpeg是否成功安装,并开始进行多媒体文件的转换和处理。此外,文章还将介绍一些常用的FFmpeg命令和参数,帮助用户快速上手。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 通过利用代码自动生成技术,旨在减轻软件开发的复杂性,缩短项目周期,减少冗余代码的编写,从而显著提升开发效率。该方法不仅能够降低开发人员的工作强度,还能确保代码的一致性和质量。 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
author-avatar
kk1049057
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有