Windows环境下用nmake编译libevent

article/2025/10/16 14:36:34

Windows环境下用nmake编译libevent

  • 一、方法总结
    • 1) nmake 命令找不到
    • 2) 头文件找不到
    • 3) lib库找不到
    • 4) 不知道如何生成“print-winsock-errors.obj”
  • 二、详细说明
    • 1、nmake 和 cl 命令
    • 2、各种头文件缺失
    • 3、lib 库无法打开
    • 4、“print-winsock-errors.obj”
  • 三、结语

最近在将一个vc2005的工程挪到vs2019上时,遇到很多问题。
其中 libevent库 1 就报了很多错误,可能是版本太低,因此需要重新编译一份。

下面将 nmake 命令编译 libevent-2.1.8-stable 源码时遇到的各种错误及解决方法做一个总结。

一、方法总结

以下添加到环境变量中的路径以本机实际搜索到的为准

1) nmake 命令找不到

将以下路径加入环境变量 PATH
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86

2) 头文件找不到

将以下路径加入环境变量 INCLUDE
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared

3) lib库找不到

将以下路径加入环境变量 LIB
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x86
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x86
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\lib\x86

4) 不知道如何生成“print-winsock-errors.obj”

这是可能出现的错误
在其它版本的 libevent 源码中拷贝print-winsock-errors.c
放到以下目录
libevent-2.1.8-stable\test\print-winsock-errors.c

二、详细说明

1、nmake 和 cl 命令

  • 以管理员身份运行cmd
    CMD即命令提示符

  • 进入代码目录,敲 nmake
    可能提示以下错误(如果没有添加环境变量的话)

D:\code\libevent-2.1.8-stable>nmake
'nmake' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
  • 通过everything工具搜索 nmake.exe
    在这里插入图片描述
  • 将第4个路径(可以试试其它路径)加入环境变量 PATH
  • 新建一个 VisualStudioTools 变量
    在这里插入图片描述
  • 将变量 %VisualStudioTools% 加入到 PATH 中
    在这里插入图片描述
  • 保存环境变量后退出cmd窗口并再次打开,输入nmake命令如下则正常
D:\code\libevent-2.1.8-stable>nmakeMicrosoft (R) 程序维护实用工具 14.28.29334.0版权所有 (C) Microsoft Corporation。  保留所有权利。NMAKE : fatal error U1064: 未找到 MAKEFILE 并且未指定目标
Stop.
  • 如果没有添加环境变量,而是将 nmake.exe 拷贝到源码目录下运行,还会提示以下错误
D:\code\libevent-2.1.8-stable>nmake /f Makefile.nmakeMicrosoft (R) Program Maintenance Utility Version 14.28.29334.0
Copyright (C) Microsoft Corporation.  All rights reserved.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
'cl' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: 'cl' : return code '0x1'
Stop.

这里的cl是指 cl.exe 工具,nmake 会调用 cl,而 cl.exe 与 nmake.exe 在同一个目录。
因此上述步骤中为 nmake.exe 添加环境变量时也包含了 cl.exe,当然也可以将 cl.exe 也拷贝过来。

2、各种头文件缺失

D:\code\libevent-2.1.8-stable>nmake /f Makefile.nmakeMicrosoft (R) 程序维护实用工具 14.28.29334.0版权所有 (C) Microsoft Corporation。  保留所有权利。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: 无法打开包括文件: “winsock2.h”: No such file or directory
buffer.c
buffer.c(32): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
bufferevent.c
bufferevent.c(31): fatal error C1083: 无法打开包括文件: “sys/types.h”: No such file or directory
bufferevent_sock.c
bufferevent_sock.c(32): fatal error C1083: 无法打开包括文件: “sys/types.h”: No such file or directory
bufferevent_pair.c
bufferevent_pair.c(29): fatal error C1083: 无法打开包括文件: “sys/types.h”: No such file or directory
listener.c
listener.c(30): fatal error C1083: 无法打开包括文件: “sys/types.h”: No such file or directory
evmap.c
evmap.c(30): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
log.c
log.c(44): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
evutil.c
evutil.c(31): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
strlcpy.c
strlcpy.c(37): fatal error C1083: 无法打开包括文件: “sys/types.h”: No such file or directory
signal.c
signal.c(34): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
bufferevent_filter.c
bufferevent_filter.c(31): fatal error C1083: 无法打开包括文件: “sys/types.h”: No such file or directory
evthread.c
evthread.c(34): fatal error C1083: 无法打开包括文件: “stdlib.h”: No such file or directory
bufferevent_ratelim.c
bufferevent_ratelim.c(30): fatal error C1083: 无法打开包括文件: “sys/types.h”: No such file or directory
evutil_rand.c
evutil_rand.c(38): fatal error C1083: 无法打开包括文件: “limits.h”: No such file or directory
evutil_time.c
evutil_time.c(31): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
win32select.c
win32select.c(33): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
evthread_win32.c
evthread_win32.c(34): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
buffer_iocp.c
include\event2/buffer.h(82): fatal error C1083: 无法打开包括文件: “stdarg.h”: No such file or directory
event_iocp.c
event_iocp.c(32): fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory
正在生成代码...
正在编译...
bufferevent_async.c
bufferevent_async.c(36): fatal error C1083: 无法打开包括文件: “errno.h”: No such file or directory
正在生成代码...
NMAKE : fatal error U1077:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\cl.EXE": 返回代码“0x2”
Stop.
  • 通过everything工具搜索 winsock2.h,stdarg.h, errno.h等
    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\WinSock2.h
    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\sys\types.h
    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdlib.h
    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\errno.h
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\limits.h
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\stdarg.h

    • 将以上共3个路径加入环境变量 INCLUDE
      INCLUDE环境变量

INCLUDE环境变量值

  • 保存环境变量后退出cmd窗口并再次打开,输入nmake /f Makefile.nmake
    如果还是提示 C1083: 无法打开包括文件: “winsock2.h”: No such file or directory 错误,按以上步骤找出
    头文件所在位置并加入环境变量 INCLUDE
D:\code\libevent-2.1.8-stable>nmake /f Makefile.nmakeMicrosoft (R) 程序维护实用工具 14.28.29334.0版权所有 (C) Microsoft Corporation。  保留所有权利。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
buffer.c
buffer.c(3096): warning C4244: “函数”: 从“const __int64”转换到“size_t”,可能丢失数据
buffer.c(3107): warning C4244: “函数”: 从“__int64”转换到“unsigned int”,可能丢失数据
buffer.c(3225): warning C4244:=: 从“__int64”转换到“ev_misalign_t”,可能丢失数据
buffer.c(3226): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3227): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3245): warning C4244: “函数”: 从“unsigned __int64”转换到“SIZE_T”,可能丢失数据
buffer.c(3251): warning C4244:=: 从“unsigned __int64”转换到“size_t”,可能丢失数据
buffer.c(3252): warning C4244:=: 从“unsigned __int64”转换到“ev_misalign_t”,可能丢失数据
buffer.c(3253): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3261): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3262): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3266): warning C4244:+=: 从“__int64”转换到“size_t”,可能丢失数据
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
evutil_time.c(537): warning C4244:=: 从“__int64”转换到“long”,可能丢失数据
evutil_time.c(542): warning C4244:=: 从“time_t”转换到“long”,可能丢失数据
win32select.c
evthread_win32.c
buffer_iocp.c
event_iocp.c
正在生成代码...
正在编译...
bufferevent_async.c
正在生成代码...lib /nologo event.obj buffer.obj bufferevent.obj bufferevent_sock.obj  bufferevent_pair.obj listener.obj evmap.obj log.obj evutil.obj  strlcpy.obj signal.obj bufferevent_filter.obj evthread.obj  bufferevent_ratelim.obj evutil_rand.obj evutil_time.obj win32select.obj evthread_win32.obj buffer_iocp.obj  event_iocp.obj bufferevent_async.obj /out:libevent_core.libcl /IWIN32-Code /IWIN32-Code/nmake /Iinclude /Icompat /DHAVE_CONFIG_H /I.  /Ox /W3 /wd4996 /nologo /c event_tagging.c http.c evdns.c evrpc.c
event_tagging.c
http.c
evdns.c
evrpc.c
正在生成代码...lib /nologo event_tagging.obj http.obj evdns.obj evrpc.obj /out:libevent_extras.liblib /nologo event.obj buffer.obj bufferevent.obj bufferevent_sock.obj  bufferevent_pair.obj listener.obj evmap.obj log.obj evutil.obj  strlcpy.obj signal.obj bufferevent_filter.obj evthread.obj  bufferevent_ratelim.obj evutil_rand.obj evutil_time.obj event_tagging.obj http.obj evdns.obj evrpc.obj win32select.obj evthread_win32.obj buffer_iocp.obj  event_iocp.obj bufferevent_async.obj /out:libevent.libcd test"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\nmake.exe" /F Makefile.nmakeMicrosoft (R) 程序维护实用工具 14.28.29334.0版权所有 (C) Microsoft Corporation。  保留所有权利。cl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c regress.c regress_buffer.c regress_http.c regress_dns.c regress_testutils.c regress_rpc.c regress.gen.c regress_et.c regress_bufferevent.c regress_listener.c regress_util.c tinytest.c regress_main.c regress_minheap.c regress_iocp.c regress_thread.c regress_finalize.c
regress.c
regress.c(2865): warning C4013: “close”未定义;假设外部返回 int
regress.c(3185): warning C4090: “函数”: 不同的“const”限定符
regress_buffer.c
regress_buffer.c(1018): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
regress_buffer.c(1028): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
regress_http.c
regress_http.c(549): warning C4098: “http_basic_test”:void”函数返回值
regress_http.c(3330): warning C4098: “http_chunk_out_test”:void”函数返回值
regress_http.c(3376): warning C4098: “http_stream_out_test”:void”函数返回值
regress_http.c(3572): warning C4098: “http_connection_fail_test”:void”函数返回值
regress_http.c(3644): warning C4098: “http_simple_test”:void”函数返回值
regress_http.c(3801): warning C4098: “http_connection_retry_conn_address_test”:void”函数返回值
regress_http.c(3806): warning C4098: “http_connection_retry_test_impl”:void”函数返回值
regress_http.c(3810): warning C4098: “http_connection_retry_test”:void”函数返回值
regress_http.c(4477): warning C4098: “http_write_during_read_test”:void”函数返回值
regress_dns.c
regress_dns.c(618): warning C4098: “dns_search_test”:void”函数返回值
regress_dns.c(623): warning C4098: “dns_search_lower_test”:void”函数返回值
regress_testutils.c
regress_rpc.c
regress.gen.c
regress_et.c
regress_bufferevent.c
regress_listener.c
regress_util.c
tinytest.c
regress_main.c
regress_minheap.c
regress_iocp.c
regress_thread.c
regress_finalize.c
正在生成代码...cl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib  regress.obj regress_buffer.obj regress_http.obj regress_dns.obj  regress_testutils.obj  regress_rpc.obj regress.gen.obj  regress_et.obj regress_bufferevent.obj  regress_listener.obj regress_util.obj tinytest.obj  regress_main.obj regress_minheap.obj regress_iocp.obj  regress_thread.obj regress_finalize.obj
LINK : fatal error LNK1181: 无法打开输入文件“ws2_32.lib”
NMAKE : fatal error U1077:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\cl.EXE": 返回代码“0x2”
Stop.
NMAKE : fatal error U1077:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\nmake.exe": 返回代码“0x2”
Stop.
  • 从以上打印可以看到没有再报头文件错误

3、lib 库无法打开

以上打印可以看到提示 “LINK : fatal error LNK1181: 无法打开输入文件“ws2_32.lib””

正在生成代码...cl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib  regress.obj regress_buffer.obj regress_http.obj regress_dns.obj  regress_testutils.obj  regress_rpc.obj regress.gen.obj  regress_et.obj regress_bufferevent.obj  regress_listener.obj regress_util.obj tinytest.obj  regress_main.obj regress_minheap.obj regress_iocp.obj  regress_thread.obj regress_finalize.obj
LINK : fatal error LNK1181: 无法打开输入文件“ws2_32.lib”
NMAKE : fatal error U1077:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\cl.EXE": 返回代码“0x2”
Stop.
NMAKE : fatal error U1077:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\nmake.exe": 返回代码“0x2”
Stop.
  • 还是用everything工具搜索 ws2_32.lib
    WS2_32.Lib有4个
  • 将第4个路径加入环境变量 LIB
    如果还有类似 “LINK : fatal error LNK1181: 无法打开输入文件“ws2_32.lib” 提示,也将库文件所在目录加入环境变量 LIB

LIB环境变量

LIB环境变量值

  • 保存环境变量后退出cmd窗口并再次打开,输入nmake /f Makefile.nmake
D:\code\libevent-2.1.8-stable>nmake /f Makefile.nmakeMicrosoft (R) 程序维护实用工具 14.28.29334.0版权所有 (C) Microsoft Corporation。  保留所有权利。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
buffer.c
buffer.c(3096): warning C4244: “函数”: 从“const __int64”转换到“size_t”,可能丢失数据
buffer.c(3107): warning C4244: “函数”: 从“__int64”转换到“unsigned int”,可能丢失数据
buffer.c(3225): warning C4244:=: 从“__int64”转换到“ev_misalign_t”,可能丢失数据
buffer.c(3226): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3227): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3245): warning C4244: “函数”: 从“unsigned __int64”转换到“SIZE_T”,可能丢失数据
buffer.c(3251): warning C4244:=: 从“unsigned __int64”转换到“size_t”,可能丢失数据
buffer.c(3252): warning C4244:=: 从“unsigned __int64”转换到“ev_misalign_t”,可能丢失数据
buffer.c(3253): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3261): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3262): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
buffer.c(3266): warning C4244:+=: 从“__int64”转换到“size_t”,可能丢失数据
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
evutil_time.c(537): warning C4244:=: 从“__int64”转换到“long”,可能丢失数据
evutil_time.c(542): warning C4244:=: 从“time_t”转换到“long”,可能丢失数据
win32select.c
evthread_win32.c
buffer_iocp.c
event_iocp.c
正在生成代码...
正在编译...
bufferevent_async.c
正在生成代码...lib /nologo event.obj buffer.obj bufferevent.obj bufferevent_sock.obj  bufferevent_pair.obj listener.obj evmap.obj log.obj evutil.obj  strlcpy.obj signal.obj bufferevent_filter.obj evthread.obj  bufferevent_ratelim.obj evutil_rand.obj evutil_time.obj win32select.obj evthread_win32.obj buffer_iocp.obj  event_iocp.obj bufferevent_async.obj /out:libevent_core.libcl /IWIN32-Code /IWIN32-Code/nmake /Iinclude /Icompat /DHAVE_CONFIG_H /I.  /Ox /W3 /wd4996 /nologo /c event_tagging.c http.c evdns.c evrpc.c
event_tagging.c
http.c
evdns.c
evrpc.c
正在生成代码...lib /nologo event_tagging.obj http.obj evdns.obj evrpc.obj /out:libevent_extras.liblib /nologo event.obj buffer.obj bufferevent.obj bufferevent_sock.obj  bufferevent_pair.obj listener.obj evmap.obj log.obj evutil.obj  strlcpy.obj signal.obj bufferevent_filter.obj evthread.obj  bufferevent_ratelim.obj evutil_rand.obj evutil_time.obj event_tagging.obj http.obj evdns.obj evrpc.obj win32select.obj evthread_win32.obj buffer_iocp.obj  event_iocp.obj bufferevent_async.obj /out:libevent.libcd test"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\nmake.exe" /F Makefile.nmakeMicrosoft (R) 程序维护实用工具 14.28.29334.0版权所有 (C) Microsoft Corporation。  保留所有权利。cl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c regress.c regress_buffer.c regress_http.c regress_dns.c regress_testutils.c regress_rpc.c regress.gen.c regress_et.c regress_bufferevent.c regress_listener.c regress_util.c tinytest.c regress_main.c regress_minheap.c regress_iocp.c regress_thread.c regress_finalize.c
regress.c
regress.c(2865): warning C4013: “close”未定义;假设外部返回 int
regress.c(3185): warning C4090: “函数”: 不同的“const”限定符
regress_buffer.c
regress_buffer.c(1018): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
regress_buffer.c(1028): warning C4244:=: 从“__int64”转换到“size_t”,可能丢失数据
regress_http.c
regress_http.c(549): warning C4098: “http_basic_test”:void”函数返回值
regress_http.c(3330): warning C4098: “http_chunk_out_test”:void”函数返回值
regress_http.c(3376): warning C4098: “http_stream_out_test”:void”函数返回值
regress_http.c(3572): warning C4098: “http_connection_fail_test”:void”函数返回值
regress_http.c(3644): warning C4098: “http_simple_test”:void”函数返回值
regress_http.c(3801): warning C4098: “http_connection_retry_conn_address_test”:void”函数返回值
regress_http.c(3806): warning C4098: “http_connection_retry_test_impl”:void”函数返回值
regress_http.c(3810): warning C4098: “http_connection_retry_test”:void”函数返回值
regress_http.c(4477): warning C4098: “http_write_during_read_test”:void”函数返回值
regress_dns.c
regress_dns.c(618): warning C4098: “dns_search_test”:void”函数返回值
regress_dns.c(623): warning C4098: “dns_search_lower_test”:void”函数返回值
regress_testutils.c
regress_rpc.c
regress.gen.c
regress_et.c
regress_bufferevent.c
regress_listener.c
regress_util.c
tinytest.c
regress_main.c
regress_minheap.c
regress_iocp.c
regress_thread.c
regress_finalize.c
正在生成代码...cl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib  regress.obj regress_buffer.obj regress_http.obj regress_dns.obj  regress_testutils.obj  regress_rpc.obj regress.gen.obj  regress_et.obj regress_bufferevent.obj  regress_listener.obj regress_util.obj tinytest.obj  regress_main.obj regress_minheap.obj regress_iocp.obj  regress_thread.obj regress_finalize.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-init.c
test-init.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-init.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-eof.c
test-eof.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-eof.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-closed.c
test-closed.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-closed.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-weof.c
test-weof.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-weof.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-time.c
test-time.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-time.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-changelist.c
test-changelist.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-changelist.obj
NMAKE : fatal error U1073: 不知道如何生成“print-winsock-errors.obj”
Stop.
NMAKE : fatal error U1077:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\nmake.exe": 返回代码“0x2”
Stop.
  • 从以上打印可以看到没有再报 “无法打开输入文件“ws2_32.lib” 错误

4、“print-winsock-errors.obj”

这是可能出现的错误,libevent-2.1.8-stable 会出现该错误,libevent-2.1.12-stable不会。
其实不管这个错误提示,我们所需要的 lib 库文件在第3步中已经编译成功。
其实我们所需要的三个lib库文件已经生成

  • 那么这个 "NMAKE : fatal error U1073: 不知道如何生成“print-winsock-errors.obj” 要怎么解决呢?
    很简单,其它版本的 libevent 源码(比如 libevent-2.1.12-stable 中就有)中找一个文件复制到 libevent-2.1.8-stable\test 目录下
D:\code\libevent-2.1.8-stable\test\print-winsock-errors.c

再次编译即可,没有报错

D:\code\libevent-2.1.8-stable>nmake /f Makefile.nmakeMicrosoft (R) 程序维护实用工具 14.28.29334.0版权所有 (C) Microsoft Corporation。  保留所有权利。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
buffer.c
... ...
regress_util.c
tinytest.c
regress_main.c
regress_minheap.c
regress_iocp.c
regress_thread.c
regress_finalize.c
正在生成代码...cl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib  regress.obj regress_buffer.obj regress_http.obj regress_dns.obj  regress_testutils.obj  regress_rpc.obj regress.gen.obj  regress_et.obj regress_bufferevent.obj  regress_listener.obj regress_util.obj tinytest.obj  regress_main.obj regress_minheap.obj regress_iocp.obj  regress_thread.obj regress_finalize.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-init.c
test-init.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-init.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-eof.c
test-eof.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-eof.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-closed.c
test-closed.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-closed.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-weof.c
test-weof.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-weof.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-time.c
test-time.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-time.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c test-changelist.c
test-changelist.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib test-changelist.objcl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo /c print-winsock-errors.c
print-winsock-errors.ccl /I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL  /Ox /W3 /wd4996 /nologo ..\libevent.lib ws2_32.lib shell32.lib advapi32.lib print-winsock-errors.objcd ..

完全清空重编要用到
nmake clean /f Makefile.nmake

三、结语

以上是在 Windows 10 系统上用 nmake 命令编译 libevent-2.1.8-stable 源码所遇到的问题的解决办法。
其它 libevent 版本或其它编译方式遇到的问题,这个教程可能不适用。


  1. libevent库有3个,分别是libevent.lib, libevent_core.lib, libevent_extras.lib ↩︎


http://chatgpt.dhexx.cn/article/lIHmyXeD.shtml

相关文章

nmake、makefile、cmake学习笔记

1.nmake 1.1 nmake reference NMAKE.EXE是Visual Studio附带的一个命令行工具,它基于描述文件中包含的命令生成项目。 要使用NMAKE,必须在开发人员命令提示符窗口中运行它。开发人员命令提示符窗口为工具、库设置了环境变量,并包含在命令行…

cmake nmake qmake 的区别联系

👇推荐关注👇 经常记不住这几个概念,都看了几次了还是容易忘,为以后方面查阅,故而从知乎上复制粘贴过来。 1、gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编…

VC++NMAKE

目 录 第1章 NMAKE 1 1.1 运行NMAKE 1 1.1.1 NMAKE的实质 2 1.2 描述块 3 1.2.1 定义 3 1.2.2 多个描述块 3 1.2.3 依赖 4 1.2.4 长文件名 4 1.2.5 多目标 4 1.2.6 合并 5 1.3 宏 5 1.3.1 定义、使用 5 1.3.2 作…

WINDOWS CMAKE与NMAKE

什么是cmake 你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MSnmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的…

vs 编译nmake工程

以本人电脑为例: 1、将D:\program files\visual studio 2013\VC\bin这个路径添加到系统环境变量的path中 2、打开cmd的控制台命令行界面 输入nmake与cl来测试是否报错 3、编译make文件: cd到源文件所在目录,使用命令nmake /F *.nmake编译m…

nmake 环境变量配置

本农有3年多C/C开发经验,最近面试全部翻车,总结原因是基础知识不过关,于是最近在看C primer 5,配套的源代码编译没通过,原因是nmake需要配置环境变量,总结错误如下 1.找不到nmake命令 解决方法:找到nmake所在路径,我用的是vs2010,C:\Program Files (x86)\Microsoft Visual Stud…

nmake命令(windows下的makefile)

1. 如果已经有vc6的dsp工程,可直接导出nmake脚本文件(.mak) “Project - Export Makefile...” nmake -f nMakeTest.mak CFG"nMakeTest - Win32 Debug" nmake -f nMakeTest.mak CFG"nMakeTest - Win32 Debug" all nmake -f nMakeTest.mak CFG&q…

nmake简介

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 nmake学习初步 前言一、nmake在哪里?二、Makefile编写1.hello.c实例代码2. Makefile3 扩展 前言 一直使用vs的IDE,最近编译sqlcipher时,发…

第八章 查询和检索:Query DSL

版权声明 本文为Elastic开源社区版权所有,保证独立性和原创性,未获得授权和允许,任何组织和个人不得以任何方式传播或复制或分享。否则必将追究法律责任。 知识内容输出不易,请尊重他人劳动成果。严禁随意传播、复制和盗用他人成果或文章内容用以商业或盈利目的! 1、查询…

mysql-dql(Data QueryLanguage)summary

1.基础查询 DESC 库名//查看库SHOW DATABASES ;//查看当前所在数据库SHOW TABLES;//查看当前库的所有表USE database;//datebase为需要查询的库名SELECT attribute,attribute2 FROM form;//从form中查询attribute,attribute2SELECT * FROM beauty;//查询表中所有属性SELECT DI…

db.query的使用

首先假设有如下表格,表格名称为:"Employees" SQL基本格式如下: [sql] view plain copy print ? select 列名称 from 表名称 最基本SQL语句,就是从表中选取要返回的列数据,不加任何过滤条件。当然如果&qu…

Elasticsearch——Query DSL语法入门

Query DSL入门 官网介绍链接: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html search api就是对存储在elastic search(以下简称es)中的数据进行查询的相关API,可以类比mysql中的select语句。…

Data Query Language(DQL):数据查询语言

Data Query Language(DQL):数据查询语言 基础查询查询所有列查询指定列 条件查询条件查询介绍查询示例如下 模糊查询模糊查询介绍查询示例如下 字段控制查询排序聚合函数分组查询分页查询 建立三张表用于查询,表中数据如下。 stu表…

SpringDataJPA+QueryDSL玩转态动条件/投影查询

在本文之前,本应当专门有一篇博客讲解SpringDataJPA使用自带的SpecificationJpaSpecificationExecutor去说明如何玩条件查询,但是看到新奇、编码更简单易懂的技术总是会让人感到惊喜,而且QueryDSL对SpringDataJPA有着完美的支持。如果你没有使…

ES的Query DSL语句介绍

1、term 过滤 term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经切词的文本数据类型): { "term": { "date": "2017-07-01" }} { "term": { "tit…

QueryDSL配置

QueryDSL配置 1&#xff1a;maven配置- <dependency><groupId>com.querydsl</groupId><artifactId>querydsl-jpa</artifactId><version>5.0.0</version></dependency><dependency><groupId>com.querydsl</gro…

Elasticsearch:DSL Query

Query DSL的分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有的数据&#xff0c;一般测试用&#xff0c;例如&#xff1a;match_all&#xff0c;但有分页限制&#xff0c;一次20…

SpringBoot+Querydsl 框架,大大简化复杂查询操作

概述 本篇博客主要将介绍的是利用spring query dsl框架实现的服务端查询解析和实现介绍。 查询功能是在各种应用程序里面都有应用&#xff0c;且非常重要的功能。用户直接使用的查询功能往往是在我们做好的UI界面上进行查询&#xff0c;UI会将查询请求发给查询实现的服务器&a…

QueryDSL 关于Q类找不到的问题

先编译代码&#xff0c;如果是在idea中&#xff0c;光标移动到项目上&#xff0c;F4&#xff0c;让后如图操作 回到项目中编码&#xff0c;就可以找到Q类了

JPA 之 QueryDSL-JPA 使用指南

Querydsl-JPA 框架&#xff08;推荐&#xff09; 官网&#xff1a;传送门 参考&#xff1a; JPA整合Querydsl入门篇SpringBoot环境下QueryDSL-JPA的入门及进阶 概述及依赖、插件、生成查询实体 1.Querydsl支持代码自动完成&#xff0c;因为是纯Java API编写查询&#xff0…