编译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文件

编译Lua源码成动态链接库并与C++结合_第1张图片

编译Lua源码成动态链接库并与C++结合_第2张图片

 

看到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 

#include 

#include 

}

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;

}

 

最后输出结果:

编译Lua源码成动态链接库并与C++结合_第3张图片

 

 

 

 

 

 

你可能感兴趣的:(Lua,C/C++,DLL)