本博客采用vs2015以及lua5.3版本进行lua动态库以及使用 工具这里就不赘述了,网上很多
生成lua动态库的步骤
一.建立vs c++控制台 dll程序
二.设置编译相对输出路径…/…/…/bin
三.设置输出 导入库相对路径…/…/…/lib
四.添加LUA_BUILD_AS_DLL宏(确认一定添加了)
相对路径指的是
目录结构很清晰,如果和我不一样,自行调整相对路径即可。
第一步 创建工程
目录结构如下:
待会生成的.dll与.lib文件会生成到bin和lib目录下
第二步 导入lua源码(与相对路径同一路径)
makefile文件不要导入,因为windows不需要
这时候点生成会报错,因为有两个main函数,这时候注释掉lua.c和luac.c的main函数即可
再次点生成或许会报错,如图
因为没有点生成动态库 改一下属性即可
重新生成就成功了
第三步 设置相对输出路径
我这里的bin目录与相对位置文件路径相差三个上级目录,所以我这么设置
(可以根据自己工程的相对位置自行调整)
然后在bin目录下会生成如下文件
再设置一下平台工具集,不然有些平台不能运行
第四步 设置输出 导入库相对路径
步骤如下:属性–链接器–导入库 将$(OutDir) 改成 …/…/…/lib/ 即可
第五步 添加LUA_BUILD_AS_DLL宏
步骤: 属性 C/C++ – 预处理器 --预处理器定义
如下图所示 证明.lib文件生成成功
到这里, .dll文件与.lib文件都已经生成成功了,下面教大家如何使用动态库。
第六步 使用动态库 (lua与c++结合的项目)
首先在luaDll的同级目录下创建一个first的空项目,并添加一个first.cpp的文件,如下图
再设置附加包含目录,主要为了包含前面生成的.dll与.lib文件
步骤 属性–C/C++ --常规 --附加包含目录 …\luaDll\luadll
头文件都在这个目录
指的是该目录,windows不区分大小写
因为新的first工程没有导入 lua.h 以及一些必要的头文件,而新的first工程
又需要一些头文件,所以重新定位到之前的工程去找这些头文件,也可以在项目中自行添加不要的头文件
点击生成,这是会提醒很多方法找不到,因为还没有在first工程中添加.lib文件
属性 – VC++目录 库目录 …/…/…/lib/ 添加库的相对路径
属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项 添加 lualib.lib
编写如下代码:
first.cpp
#include <iostream>
extern "C"
{
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
}
static int get_sum(lua_State *L)
{
int n = lua_gettop(L);
double sum = 0;
int i;
for (i = 1; i <= n; ++i) {
if (!lua_isnumber(L, i)) {
printf("invalid argument i=");
}
else {
sum += lua_tonumber(L, i);
}
}
lua_pushnumber(L, n);
lua_pushnumber(L, sum);
return 2;
}
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "get_sum", get_sum);
luaL_dofile(L, "test.lua");
lua_close(L);
L = NULL;
system("pause");
return 0;
}
test.lua
local n, sum = get_sum(10, 20, 30);
print("num: ", n);
print("sum: ", sum);
生成并运行
会提示如上的错误,此时把生成的.dll文件拷贝到 first.cpp的同级目录下,这是第一种方法.
第二种方法是把.dll文件放到C:\Windows\System32中
使用任意一种方法都可以
然后生成并运行就可得到满意的结果
linux安装
安装luan
wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
tar-xf lua-5.1.5.tar.gz
cd lua-5.1.5
make generic
make install