文章目录
-
-
- 为什么要生成dll?
- 一、下载lua源码并解压
- 二、打开Visual Studio 2017创建一个空的项目
- 三、导入资源文件
- 四、移除lua.c和luac.c文件(可选操作)
- 五、添加预处理宏
-
-
-
- Q1: 这里我们为什么要添加预处理宏呢?
- Q2: 那么 __declspec(dllexport) 有什么作用呢?
- Q3: 如何查看导出的dll是不是坏的
-
-
- 六、选择生成dll模式
- 七、build
- 八、采用nmake方式编译
-
为什么要生成dll?
https://www.lua.org/manual/5.4/readme.html 官网中有这么一段话, 意思是Windows平台建议生成dll, 而不是静态库,但是为什么有这个建议呢? 直接看第五节

一、下载lua源码并解压
https://github.com/lua/lua/releases
二、打开Visual Studio 2017创建一个空的项目

三、导入资源文件
解决方案资源管理器>>资源文件>>右键添加>>现有项>>选择解压好的lua源码
四、移除lua.c和luac.c文件(可选操作)
解决方案资源管理器>>资源文件>>找到lua.c文件>> 右键移除
五、添加预处理宏
右键解决方案>>属性>>C/C++>>预处理器>>预处理器定义>>在最前面添加LUA_BUILD_AS_DLL;
Q1: 这里我们为什么要添加预处理宏呢?
因为luaconf.h文件中,有这么一段:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #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 /* } */ |
Q2: 那么 __declspec(dllexport) 有什么作用呢?
其作用是导出函数到dll中,给接口提供一个外部调用方式,能够使程序在没有导入lib库时, 通过dll动态调用。
也就是说导出的dll如果没有 __declspec(dllexport) 符号就算是导出失败
Q3: 如何查看导出的dll是不是坏的
VS 提供了一个工具:bumpbin , 用VS自带的命令行打开即可
1 | bumpbin /exports xxx.dll |
结果如下:

六、选择生成dll模式
右键解决方案>>属性>>常规>>项目默认值>>配置类型选择dll
七、build
八、采用nmake方式编译
传送门