无法在 Windows 上构建 libevent

Posted

技术标签:

【中文标题】无法在 Windows 上构建 libevent【英文标题】:cannot build libevent on windows 【发布时间】:2018-07-25 06:24:52 【问题描述】:

所以我一直在尝试在 Windows 上构建 libevent。但是,当我运行 nmake MakeFile.nmake... 时,它一直给我以下输出...

        cl /IWIN32-Code /IWIN32-Code/nmake /Iinclude /Icompat /DHAVE_CONFIG_H /I.  
/Ox /W3 /wd4996 /nologo /c event.c buffer.c bufferevent.c bufferevent_sock.c bufferevent_pair.c 
listener.c evmap.c log.c evutil.c strlcpy.c signal.c bufferevent_filter.c evthread.c bufferevent_ratelim.c 
evutil_rand.c evutil_time.c win32select.c evthread_win32.c buffer_iocp.c event_iocp.c bufferevent_async.c 
event.c
event.c(31): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
buffer.c
buffer.c(32): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
bufferevent.c
bufferevent.c(31): fatal error C1083: Cannot open include file: 'sys/types.h': No such file or directory
bufferevent_sock.c
bufferevent_sock.c(32): fatal error C1083: Cannot open include file: 'sys/types.h': No such file or directory
bufferevent_pair.c
bufferevent_pair.c(29): fatal error C1083: Cannot open include file: 'sys/types.h': No such file or directory
listener.c
listener.c(30): fatal error C1083: Cannot open include file: 'sys/types.h': No such file or directory
evmap.c
evmap.c(30): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
log.c
log.c(44): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
evutil.c
evutil.c(31): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
strlcpy.c
strlcpy.c(37): fatal error C1083: Cannot open include file: 'sys/types.h': No such file or directory
signal.c
signal.c(34): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
bufferevent_filter.c
bufferevent_filter.c(31): fatal error C1083: Cannot open include file: 'sys/types.h': No such file or directory
evthread.c
evthread.c(34): fatal error C1083: Cannot open include file: 'stdlib.h': No such file or directory
bufferevent_ratelim.c
bufferevent_ratelim.c(30): fatal error C1083: Cannot open include file: 'sys/types.h': No such file or directory
evutil_rand.c
evutil_rand.c(38): fatal error C1083: Cannot open include file: 'limits.h': No such file or directory
evutil_time.c
evutil_time.c(31): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
win32select.c
win32select.c(33): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
evthread_win32.c
evthread_win32.c(34): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
buffer_iocp.c
include\event2/buffer.h(82): fatal error C1083: Cannot open include file: 'stdarg.h': No such file or directory
event_iocp.c
event_iocp.c(32): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory
Generating Code...
Compiling...
bufferevent_async.c
bufferevent_async.c(36): fatal error C1083: Cannot open include file: 'errno.h': No such file or directory
Generating Code...
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0
\VC\bin\cl.EXE"' : return code '0x2'
Stop.

似乎找不到某些文件。所以我找到了winsock2.h和其他文件所在的目录,并为这些文件添加了一个环境变量,但我仍然得到同样的错误。我还注意到我实际上无法在我的系统上找到 sys/types.h 和 limits.h。如果有人可以帮助找出导致此问题的原因,我将不胜感激。谢谢。

更新: 所以我已经确定了我的系统所需的所有文件在哪里,我尝试将环境变量添加到适当的目录,但是,当我运行 nmake 时仍然找不到它们。

【问题讨论】:

看起来您是在常规命令提示符下运行它。如果您想让您的生活更轻松,请改为在开发人员命令提示符下运行它。这是一个预配置的环境,在安装 Visual Studio 时设置。 【参考方案1】:

libevent README.md 文件不建议使用 nmake。它指向您使用 CMake,现有的 Makefile.nmake 在顶部有一个很大的注释,表明它可能不起作用。所以安装cmake(你可以使用Chocolatey'choco install cmake')然后按照文档运行命令。

mkdir build
cmake -DEVENT__DISABLE_OPENSSL=ON ..
cmake --build .

这对我使用 Visual Studio 2017 和分支 release-2.1.8-stable 的 git checkout 有效。我添加了 disable-openssl 选项,因为没有这个选项就失败了,我不想花时间单独安装它。

【讨论】:

好的,它似乎已经正确构建,我应该如何获取 libevent_core 的 .lib 文件?我在构建目录中只能找到 event_core.lib。 在 Windows 上,库通常不以 lib 为前缀,因此您需要将 event_core.lib 提供给编译器以进行链接步骤。 cmake 命令会生成许多示例项目(即:hello_world),因此您可以检查其中一个以查看需要什么。

以上是关于无法在 Windows 上构建 libevent的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Fedora Eclipse 上构建 GTK+ Windows 应用程序

无法使用 VS Code 在 Windows 机器上为 linux 构建 .Net core 3.0 项目

从现有 cmake 应用程序导入的 Netbeans 项目无法在 Windows 上构建并出现文件系统错误

在 Windows 上构建 C++ 项目时,Tensorflow 2.3 无法解析机器生成的文件中的外部符号

无法在 Windows 服务器上使用 docker 为 gitlab-ci 运行构建

在调试模式下在 Windows 上启动 lib/main.dart... 无法构建:找不到 vcvars64.bat