编译Lua源码成动态链接库并与C++结合

Lua编译

1、编译Lua为动态库(不用静态库,影响C++编译速度)

2、建立Lua编译器项目

3、编译Lua库为了以后对其扩展(也可以直接下载库)

步骤:

1.建立一个win32的空项目,并且在win32的向导里面点击选定dll,空项目

2.把Lua导进去我们的空项目里面去

3.编译

这里会出两个错误,都是main函数重复引起的

    1.在luac.c里面,我们把main函数改成cmain

    2.在lua.c里面,我们把main函数改成rmain

4.设置编译输出路径为../../bin

5.设置输出导入库路径为../../lib

6.添加LUA_BUILD_AS_DLL宏

设置编译输出路径:

项目右键找到属性 --> 配置属性 ---> 常规 ---> 输出目录 ---> ..\..\bin       并且在对应的路径手动去创建bin目录

设置输出导入库路径:

项目右键找到属性 --> 链接器 --> 高级 ---> 导入库 ---> 改成..\..\lib\$(TargetName).lib

设置之后编译发现在lib文件夹下并没有关于lib的文件产生,这是由于我们的Lua的预编译宏定义没弄

添加预编译宏:

项目右键找到属性 --> C/C++ --> 预处理器 --> 预处理器定义 --> 在前面添加  LUA_BUILD_AS_DLL; (添加这句但不删除后面的)

编译之后我们就可以得到bin的dll和lib文件

看到bin和lib有这五个文件,编译Lua就大功告成了

测试Lua能否使用

创建一个新的项目

Windows桌面向导 --> 位置选在我们拥有Lua的bin下的dll和lib的src文件下 --> 确定 ---> 选择windows控制台程序.exe、不要预编译、安全开发生命周期

我们得先把lua的.h文件导入到我们的项目里面去

项目右键找到属性    -->    C/C++    -->    常规    -->    附加包含目录:..\Luadll(我们之前编译Lua的项目名称就是Luadll,这个项目拥有lua的所有头文件)

把Lua的lib导进去

项目右键找到属性    -->    链接器    -->    常规    -->    附加目录库:..\..\lib

并且在

链接器    -->    输入    -->    附加依赖项添加:Luadll.lib;

把输出目录改成bin

项目右键找到属性    -->    配置属性    -->    常规    -->    输出目录改成..\..\bin

                                                                    调试    -->   工作目录改成..\..\bin

在bin下创建一个main.lua(程序的输出目录bin)

内容:

print("Hello Lua")

程序:

extern "C" {                          //指定这些都是用C语言编译的

#include <lua.h>

#include <lauxlib.h>

#include <lualib.h>

}

int main(void)

{

        lua_State* L = lua_open();            //创建lua的状态,堆栈

        luaopen_base(L);                                     //打开基本库

        if (luaL_loadfile(L, "main.lua")) {

               const char *error = lua_tostring(L, -1);

               printf("lua load error: %s \n", error);

               return -1;

        }

        if (lua_pcall(L, 0, 0, 0)) {

               const char *error = lua_tostring(L, -1);

               printf("lua call error: %s \n", error);

               return -1;

        }                      //开始调用

        return 0;

}

最后输出结果:

发布了23 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/TanJiaLiang_/article/details/86582196
今日推荐