Lua 开发环境安装与 C/C++ 开发

        要开发与 Lua 交互的 C/C++ 程序,则必须有相关的头文件,以及 Lua库。编译 Lua 库可以下载源码进行编译,默认编译出来是静态库,在开发 C/C++ 相关程序时,加链接 -llua 即可。

源码下载:curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz

下载完成后,进行解压,然后就可以进行编译了。首先切换到解压的目录下,输入:make help

看一下支持哪些平台,因为服务器上 centos 的,所以就编译 linux 版本:
 

很快就能编译出 liblua.a 库,在解压目录src下。如果要把编译好的库和头文件放到系统默认目录下,则 make install 即可。接下来就可以写 c/c++ 代码了,如:
 

#include <stdio.h>
#include <stdlib.h>

#ifdef __cplusplus

extern "C" {
#include <lauxlib.h>
#include <lua.h>
#include <lualib.h>    
}

#endif

int main()
{
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    if(luaL_loadfile(L, "init.lua"))
    {
        printf("load file: hello.lua faild...\n");
        lua_close(L);
        return 1;
    }
    lua_pcall(L, 0, 0, 0); /* 前面这几步都基本固定 */
    
    lua_getglobal(L, "COM");         /* 先找到表 */
    if(lua_type(L, -1) != LUA_TTABLE)    
    {
        printf("can not find table: COM \n");
        lua_close(L);
        return 1;
    }

    lua_pushstring(L, "myAdd");    /* 要找的函数名入栈 */
    lua_gettable(L, -2);
    if(lua_type(L, -1) != LUA_TFUNCTION)    /* 找到的是否是函数 */
    {
        printf("find myAdd is not a function.\n");
        lua_close(L);
        return 1;
    }

    lua_pushnumber(L, 111);
    lua_pushnumber(L, 222);
    lua_pcall(L, 2, 1, 0);    /* 传参, 执行 */
    printf("call lua function add() and result: %d\n", (int)lua_tonumber(L, -1));

    lua_close(L);
    return 0;
}

添加编译选项:-llua,但出现了一个链接问题,显示 lua_xxx 没有实现,如:
  一开始以为编译的库有问题,也查看了库里的符号,显示是有这些函数定义的,如用 nm 命令查看结果:

T 则表示定义,而U表示引用。那为何会出现这个错误呢?原因为 这些接口都是纯 C 写的,但我们这个代码是 C++,这样是找不到这些符号的,必须将这些接口添加 extern "C" 声明,告诉编译器这些接口是 C 接口,不能按 C++ 的方式进行查找。所以代码里必须添加如下:
 

#ifdef __cplusplus
extern "C" {
#include <lauxlib.h>
#include <lua.h>
#include <lualib.h>    
}
#endif

 添加后就不会再有这些 Lua_xx 找不到的问题了,但出现了另外一个问题:

 这些不知道是什么接口,直接 man 看了下,手册里提示需要添加链接:-ldl,编译正常:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值