这是我报错前的代码
test.cpp
#include<stdio.h>
extern "C"{
#include<lua.h>
#include<lualib.h>
#include<lauxlib.h>
}
#include<iostream>
#include<string.h>
using namespace std;
int main(){
lua_State *L = luaL_newstate();
if(L == NULL){
printf("Creat Lua State Error !\n");
return -1;
}
int ret = luaL_dofile(L ,"test.lua");
if(ret){
printf("Lua doFile Error ret=%d !\n", ret);
return -1;
}
lua_getglobal(L, "name");
if(lua_isstring(L, -1)){
string str = lua_tostring(L, -1);
printf("read name form C: %s\n", str.c_str());
}
lua_close(L);
return 0;
}
test.lua
name="dingzf"
print("read name from lua", name)
编译
g++ -o test test.cpp -llua-5.1
执行
报错!!
解决办法:在luaL_dofile之前加一行luaL_openlibs(L);
#include<stdio.h>
extern "C"{
#include<lua.h>
#include<lualib.h>
#include<lauxlib.h>
}
#include<iostream>
#include<string.h>
using namespace std;
int main(){
lua_State *L = luaL_newstate();
if(L == NULL){
printf("Creat Lua State Error !\n");
return -1;
}
luaL_openlibs(L);
int ret = luaL_dofile(L ,"test.lua");
if(ret){
printf("Lua doFile Error ret=%d !\n", ret);
return -1;
}
lua_getglobal(L, "name");
if(lua_isstring(L, -1)){
string str = lua_tostring(L, -1);
printf("read name form C: %s\n", str.c_str());
}
lua_close(L);
return 0;
}
编译、执行ok