CentOS 编译安装 Lua LuaSocket

CentOS5.5 Lua5.1.4 LuaSocket2.0.2

/usr/bin/ld: cannot find -lreadline

直接 make 会报错,缺少依赖。

# yum -y install gcc make ncurses-devel readline-devel
# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz

# tar zxvf lua-5.1.4.tar.gz
# cd lua-5.1.4
#  make linux
# make install
# cd ..
# wget http://luaforge.net/frs/download.php/2664/luasocket-2.0.2.tar.gz
# tar zxvf  luasocket-2.0.2.tar.gz
# cd luasocket-2.0.2
# make

# make install


Cocos2d-x 已经提供了对 Lua 的基本支持,但除了 Lua 的基本库外,并没有捆绑一些常用库,例如 LuaSocket。

经过一番尝试,终于搞定了此问题 :)

获得 LuaSocket 源代码后,在 cocos2d-x 项目的 libs/lua 目录中建立子目录 exts/luasocket,并将 luasocket-2.0.2/src 目录中所有的 *.c/*.h 文件拷贝到 libs/lua/exts/luasocket 目录中。

在 libs/lua/exts 目录中建立文件:

lualoadexts.h

#ifndef __LUALOADEXTS_H_ #define __LUALOADEXTS_H_  #include "lauxlib.h"  void luax_initpreload(lua_State *L);  #endif // __LUALOADEXTS_H_ 

lualoadexts.c

#include "lualoadexts.h"  // luasocket #include "luasocket.h" #include "mime.h"  static luaL_Reg luax_preload_list[] = {     {"socket.core", luaopen_socket_core},     {"mime.core", luaopen_mime_core},     {NULL, NULL} };  void luax_initpreload(lua_State *L) {     luaL_Reg* lib = luax_preload_list;     luaL_findtable(L, LUA_GLOBALSINDEX, "package.preload",                    sizeof(luax_preload_list)/sizeof(luax_preload_list[0])-1);     for (; lib->func; lib++) {         lua_pushstring(L, lib->name);         lua_pushcfunction(L, lib->func);         lua_rawset(L, -3);     }     lua_pop(L, 1); } 

最后,打开 libs/lua/cocos2dx_support/LuaEngineImpl.cpp 文件,在 CCLuaScriptModule::CCLuaScriptModule() 构造函数最后载入 Lua 标准库和扩展库的代码:

CCLuaScriptModule::CCLuaScriptModule() {     d_ownsState = true;     d_state = lua_open();     luaL_openlibs(d_state);     int nOpen = tolua_Cocos2d_open(d_state);     CC_UNUSED_PARAM(nOpen);     nOpen = tolua_SimpleAudioEngine_open(d_state);     CC_UNUSED_PARAM(nOpen);      // init standard libraries     luaL_openlibs(d_state);     // init more libraries     luax_initpreload(d_state); } 

LuaScoket 除了 C 代码,还有一部分是 Lua 代码,所以需要将 luasocket-2.0.2/src/*.lua 复制到项目中,然后用下列 Lua 代码进行测试:

local socket = require("socket") print("socket module:", socket) print("socket.connect function:", socket.connect) print("socket.bind function:", socket.bind)  print("\n") print("io module:", io) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值