前置工作,准备好lua安装包。
依次使用以下命令
得到安装包:
wget http://www.lua.org/ftp/lua-5.2.0.tar.gz
解压缩:
tar zxf lua-5.2.0.tar.gz
进入安装包
cd lua-5.2.0
make linux
make install
如遇到readline相关问题
apt-get install libreadline-dev
在这个网址下载好lua安装包。
http://www.lua.org/download.html
windows下需要做一些配置,用于链接静态库或动态库,所以不能光下载安装包
可在以下网站下载,提取处lib 和 include 文件夹。
https://github.com/rjpcomputing/luaforwindows githuab
我自己已经把这些需要的工具都下载好了
lua安装包以及lib库,include头文件都在这。
链接:https://pan.baidu.com/s/1uxpheOsYiqnbMdBO2hCXzA?pwd=h588
提取码:h588
需要一个.lua文件,一个c或者cpp文件
hello.lua
str = "i am so cool"
tbl = {name = "shun", id = 2020104}
function add(a, b)
return a + b
end
print("nihao")
test.cpp
#include
#include
#include
using namespace std;
int main() {
lua_State* L = luaL_newstate(); //lua_open();
luaL_openlibs(L); //必不可少
//加载lua文件
int bRet = luaL_loadfile(L, "hello.lua");
if (bRet) {
cout << "load file error" << endl;
return 0;
}
//运行lua文件
bRet = lua_pcall(L, 0, 0, 0);
if (bRet) {
cout << "pcall error" << endl;
return 0;
}
//读取变量
lua_getglobal(L, "str");
string str = lua_tostring(L, -1);
cout << "str = " << str.c_str() << endl; // str = I am so cool
//读取table
lua_getglobal(L, "tbl");
lua_getfield(L, -1, "name");
str = lua_tostring(L, -1);
cout << "tbl:name = " << str.c_str() << endl;
//读取函数
lua_getglobal(L, "add");
lua_pushnumber(L, 10); //压入第一个参数
lua_pushnumber(L, 20); //压入第二个参数
int iRet = lua_pcall(L, 2, 1, 0); //调用参数, 调用完以后,会将值压入栈中
// 2表示参数个数, 1表示返回结果个数,返回的结果会压入栈中
if (iRet) {
const char* pErrorMsg = lua_tostring(L, -1);
cout << pErrorMsg << endl;
lua_close(L);
return 0;
}
if (lua_isnumber(L, -1)) {//取值输出
double fValue = lua_tonumber(L, -1);
cout << "Result is " << fValue << endl;
}
return 1;
}
完成以上方法一的配置后
将以上的hello.lua 和 test.cpp放在一个目录下,直接使用命令
g++ test.cpp -llua -ldl -o test
运行
./test 即可看到效果。
我使用的vs2019
创建一个windows桌面向导下的控制台程序工程,将hello.lua, test.cpp, 都加入这个功能,当然lib和include也可以放进来(不是必须的,后边使用它们的时候只需要得到它们路径即可)
1:将刚才下载的include文件的路径放到红框里
2:将刚才下载的lib目录放进去
3:在这里写入lib库文件的名字,名字自己在lib文件里找,这里是lua5.1.lib
当然,这步不是必须的,你也可以直接在代码编辑区写上
#pragma comment(lib,"lua5.1.lib") //一样的效果。
如果使用的是静态库方法到此为止就可以了,但以上的测试用到了动态库,如果你直接运行它会告诉你找不到…dll文件,这时在lib文件中找到lua5.1.dll ,复制一份到当前工程这一层级下(打开工程目录的那一层级),到此为止,即可运行。
这里只是 C/C++ 调用lua,去这一篇学习lua调用C/C++(点我)
若有疑问,欢迎评论区留言讨论~