我正在尝试编译luasocket-2.0.2(或:luasocket),但是在尝试编译时,某些宏似乎未定义。即:

identifier "SIGPIPE" is undefined
identifier "F_GETFL" is undefined
identifier "O_NONBLOCK" is undefined
identifier "F_SETFL" is undefined


如果我用谷歌搜索,我看到那个signal.h必须包含在内。我没有更改代码或任何内容,并且正如您期望的那样,其中包含标题:

#include <string.h>
#include <signal.h>

#include "socket.h"


不太确定我在这里缺少什么。

我尝试将其编译为Windows。

编译器标志:

/GS /analyze- /W3 /Zc:wchar_t /I"E:\git\luasocket-2.0.2\../luaext-linker/include" /ZI /Gm /Od /Fd"mime\Debug\vc140.pdb" /Zc:inline /fp:precise /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "MIME_EXPORTS" /D "MIME_API=__declspec(dllexport)" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"mime\Debug\" /EHsc /nologo /Fo"mime\Debug\" /Fp"mime\Debug\mime.pch"


错误发生在套接字项目的usocket.c中:

"SIGPIPE" is undefined  socket  e:\git\luasocket-2.0.2\src\usocket.c    80
...

最佳答案

好像usocket.c是Unix特定的源。

/*=========================================================================*\
* Socket compatibilization module for Unix
* LuaSocket toolkit


您不应尝试将其包含在以Win为目标的版本中(除非您正在使用Cygwin)。同样,socket.vcxproj在源集中也没有提及此文件。这证实了先前的建议。

如果您决定通过win32.cmd脚本构建它-前缀的正确路径,因为脚本使用了一个硬编码的脚本:

make LUAPREFIX_win32='c:\cygwin\home\diego\vc12' LUAV=5.1 PLAT=win32 LUALIBNAME_win32=lualib.lib PLATFORM_win32=Debug install-both

07-24 13:31