hanxi / blog

涵曦的博客

Home Page:https://blog.hanxi.cc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

lua嵌入C中实例

hanxi opened this issue · comments

目录结构

编译出来为我所需的文件,以及代码文件

├── bin
│   ├── test
│   └── test.lua
├── build
├── CMakeLists.txt
├── lua
│   ├── include
│   │   ├── lauxlib.h
│   │   ├── lua.h
│   │   ├── lua.hpp
│   │   ├── luaconf.h
│   │   └── lualib.h
│   └── lib
│       └── liblua.a
└── src
    └── main.cpp

源代码

//main.cpp
#include <stdio.h>

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

int main(int argc, char ** argv) {
    lua_State * L = luaL_newstate() ;        //创建lua运行环境
    if (!L) {
        printf("error for luaL_newstate\n");
    }
    luaopen_base(L);                         // 加载Lua基本库
    luaL_openlibs(L);                        // 加载Lua通用扩展库

    int ret = luaL_loadfile(L,"test.lua") ;  //加载lua脚本文件
    if (ret) {
        printf("error for luaL_loadfile\n");
    }
    ret = lua_pcall(L,0,0,0) ;
    if (ret) {
        printf("error for lua_pcall\n");
    }
    lua_getglobal(L,"printmsg");
    ret = lua_pcall(L,0,0,0);
    if (ret) {
        printf("error for lua_pcall\n");
    }

    return 0;
}
-- test.lua

function printmsg()
    print("hello word")
end
#CMakeLists.txt
PROJECT(test)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

set(EXECUTABLE_OUTPUT_PATH ../bin)

## libs
link_directories(/usr/local/lib)
link_directories(/usr/lib)

## includes
include_directories(/usr/local/include)
include_directories(./src SRC_DIR)
include_directories(./lua/include)

aux_source_directory(./src SRC_DIR)

## apps
add_executable(test
    ${SRC_DIR}
)

## link libs
target_link_libraries(test lua m dl)

编译运行

    $ cd build
    $ cmake ..
    $ make
    $ cd ../bin
    $ ./test