• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Windows 环境编译 Lua5.3

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文讲述两种 lua 源码编译方式,命令行编译与 VS 编译,以当前最新的 lua-5.3.5 为例,开始编译前请下载并安装 VS2015。

下载 lua 源码

下载地址

命令行编译

  • 解压 lua 源码

  • 在根目录创建批处理文件 msvc_build.bat

  • 打开文件,写入以下命令:

    @echo off
    md bin
    md lib
    md include
    cd src
    
    cl /c /nologo /W3 /O2 /Ob1 /Oi /Gs /MD /D_CRT_SECURE_NO_DEPRECATE l*.c
    ren lua.obj lua.o
    ren luac.obj luac.o
    lib /OUT:lua53.lib *.obj
    copy lua53.lib ..\lib\lua53.lib
    del *.o *.obj *.exp *.lib *.dll *.exe
    
    cl /c /nologo /W3 /O2 /Ob1 /Oi /Gs /MD /D_CRT_SECURE_NO_DEPRECATE /DLUA_BUILD_AS_DLL l*.c
    ren lua.obj lua.o
    ren luac.obj luac.o
    link /DLL /IMPLIB:lua53.lib /OUT:lua53.dll *.obj
    link /OUT:lua53.exe lua.o lua53.lib
    link /OUT:luac53.exe luac.o *.obj
    copy lua53.exp ..\bin\lua53.exp
    copy lua53.lib ..\bin\lua53.lib
    copy lua53.dll ..\bin\lua53.dll
    copy lua53.exe ..\bin\lua53.exe
    copy luac53.exe ..\bin\luac53.exe
    del *.o *.obj *.exp *.lib *.dll *.exe
    
    copy lauxlib.h ..\include\lauxlib.h
    copy lua.h ..\include\lua.h
    copy lua.hpp ..\include\lua.hpp
    copy luaconf.h ..\include\luaconf.h
    copy lualib.h ..\include\lualib.h
    cd ..\
  • 打开:开始 -> Visual Studio 2015 -> VS2015 开发人员命令提示,cd 到 lua 源码根目录

  • 运行 msvc_build.bat,等待编译结果,结果如下:

使用 VS2015 编译

  • 创建空项目 lua53,将 lua.c 添加进该项目。

  • 解决方案'lua53' 下添加新的 Win 32 项目 luadll:在引导弹窗中选择下一步,应用程序类型选择 DLL,附加选项选择空项目,点击完成,将 lua.cluac.c 以外的文件全部添加进该项目。

  • lua53 项目添加引用,方法如图所示:

  • lua53 项目附加添加包含目录为 luadll 头文件所在目录,方法如图所示:

  • luadll 输出文件名改为 lua53,方法如图所示:

  • luadll 添加预处理器定义 LUA_BUILD_AS_DLL ,方法如图所示:

  • 在解决方案'lua53'下添加新的空项目 luac53,将 lua.c 以外的文件全部添加进该项目。

  • 分别选择 lua53 luac53 ,右键生成项目。

  • 生成结果如下:

遇到的问题及解决方案

  1. luadll 编译时未生成 .lib 文件,解决方法:添加预处理器定义 LUA_BUILD_AS_DLL,原因见 luaconf.h:

    /*
    @@ LUA_API is a mark for all core API functions.
    @@ LUALIB_API is a mark for all auxiliary library functions.
    @@ LUAMOD_API is a mark for all standard library opening functions.
    ** CHANGE them if you need to define those functions in some special way.
    ** For instance, if you want to create one Windows DLL with the core and
    ** the libraries, you may want to use the following definition (define
    ** LUA_BUILD_AS_DLL to get it).
    */
    #if defined(LUA_BUILD_AS_DLL)    /* { */
    
    #if defined(LUA_CORE) || defined(LUA_LIB)    /* { */
    #define LUA_API __declspec(dllexport)
    #else                        /* }{ */
    #define LUA_API __declspec(dllimport)
    #endif                       /* } */
    
    #else                /* }{ */
    
    #define LUA_API      extern
    
    #endif               /* } */
  2. luac53 不能以动态链接库的方式进行编译,这是因为有一些核心函数并未进行导出。

本文项目工程链接

lua53 VS2015项目

请将项目中的绝对路径换成你自己的路径

参考链接

为Lua5.3编写C模块简单示例


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua热更框架之XLua发布时间:2022-07-22
下一篇:
玩转 lua in Redis发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap