luasocket 项目源码编译与部署。
分 VS 合
连载四中,已经建立了 lua 解决方案和 lualib、luaexe 两个项目,下一步面临两个选择,一是分,建立 luasocket 解决方案,并在该解决方案下建立项目;二是合,直接在 lua 解决方案下建立项目。选择一可明确区分功能界限,但需要打开多个 IDE 窗口,并要求手动解决依赖关系,如手动选择编译的先后次序;选择二模糊了功能界限,但只需要打开一个 IDE 窗口,并能利用 visual studio 界面设置项目间的依赖关系,实现一键编译。笔者选择二。
建立 luasocket_socket 和 luasocket_mime 两个项目,如图所示:
项目依赖设置,如图所示:
目录布局如图所示:
其中,src\luasocket-3.0-rc1*\ 存放 *luasocket 源码;vs\lua\luasocket_socket\ 和 *vs\lua\luasocket_mime\ 存放新增的 *luasocket_socket 和 luasocket_mime 两个项目。luasocket_socket 项目
除 mime.c 文件外,所有 .c 文件拖放至 luasocket_socket 项目下,并删除 unix 专用源码:serial.c、unix.c、usocket.c,如图所示:
visual studio 用户自定义宏如图所示:
c/c++ 预处理参数一:_CRT_SECURE_NO_WARNINGS*,否则出现如下报错信息:
*c/c++ 预处理参数二:_WINSOCK_DEPRECATED_NO_WARNINGS*,否则出现如下报错信息:
*c/c++ 预处理参数三:LUASOCKET_API=__declspec(dllexport)*,定义导出到 *.dll 的函数
c/c++ 预处理参数设置如图所示:
luasocket_socket 项目配置如图所示:
luasocket_socket 项目编译报错信息如图所示:
查找 luaL_checkint,结果如图所示:
可以看出,lua 5.3 版本的库文件提供的函数名为 luaL_checkinteger*,而 *luasocket_socket 项目调用的函数名为 luaL_checkint*,修改 *luasocket_socket 的 luasocket.c 文件,把 luaL_checkint 替换为 luaL_checkinteger*,可编译成功。如图所示:
*.lua 文件处理
luasocket 源码包含 .lua 文件,这些文件需要放至特定位置,才能与生成的 .dll 文件一起确保 socket 模块正常运行。.lua 文件的存放位置可参考源代码的帮助文档,如图所示:
除 mime.lua 文件外,把全部 .lua 文件拖放至 luasocket_socket 项目,如图所示
利用 visual studio 管理机制,对每个 .lua 文件设置输出位置,如图所示:
visual studio 用户自定义宏如图所示:
luasocket_mime 项目配置如图所示: