我已经使用LuaForWindows安装了Lua5.1,但是我在安装的文件中看不到luasocket.h,所以我似乎不能在我的Visual Studio C++项目中使用它。
所以,我正在尝试构建,并从github获得了Lua 5.2的最新版本,尽管它还在开发中,因为我无法从sourceforge找到Lua 5.1的源代码。
当我转到http://luaforge.net/projects/luasocket/时,它会将我带回LuaSocket页面。
所以,我构建了Lua 5.2.2,这是我的luasocket的build.bat:
set INCLUDE=%INCLUDE%;C:\Users\me\Downloads\lua-5.2.2\src
echo %INCLUDE%
set LIB=%LIB%;C:\Users\me\Downloads\lua-5.2.2\src
echo %LIB%
ren unix.c unix.c00
ren usocket.c usocket.c00
cl /MD /O2 /W3 /c /nologo /DWIN32_LEAN_AND_MEAN *.c
ren mime.obj mime.o
link /DLL /OUT:socket.dll /base:0x67800000 /export:luaopen_socket_core *.obj mime.o msvcrt.lib lua5.2.lib wsock32.lib
link /DLL /OUT:mime.dll /base:0x67700000 /export:luaopen_mime_core mime.o msvcrt.lib lua5.2.lib最大的问题是在尝试编译某些c文件时出现luaL_openlib undefined,而_luaL_openlib是引用的无法解析的外部符号,但这些都是相关的问题。
我现在不关心我使用的是Lua5.1还是5.2,但是我需要能够使用LuaSocket,那么有没有办法在LuaForWindows (https://code.google.com/p/luaforwindows/)中使用它,或者我的build.bat有问题可以解决我的问题吗?
发布于 2013-05-02 01:36:40
(2015年10月2日更新)之前描述的更改已合并到luasocket master branch中,后者在Windows上与Lua5.2一起编译。
(上一版本的答案,不再适用)
如果你想用Lua5.2编译luasocket,你需要使用this branch。它包含VisualStudio的解决方案文件。
我没有用VisualStudio编译过这个分支,但我确实用mingw编译了它,并在Windows上的Lua5.2中使用了它。
下面是我拥有的用于-lwsock32 -lws2_32 -llua的构建标志列表:BUILD_FLAGS="-Wl,-s -O2 -shared -D LUA_COMPAT_MODULE -D IPV6_V6ONLY=27 -D WINVER=0x0501 -s;我还链接了mingw。
在您的例子中,我没有看到LUA_COMPAT_MODULE,它目前是luasocket所需要的,并且在库列表中也没有看到ws2_32。
我还遇到了丢失的inet_ntop和inet_pton调用,所以我patched luasocket将它们包含进来(不确定这是否也是VS的问题)。您可能希望尝试使用以下分支进行编译:https://github.com/pkulchenko/luasocket/commits/lua52-mingw。
https://stackoverflow.com/questions/16321493
复制相似问题