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

  • 进入代码目录,敲 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

  • 保存环境变量后退出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
  • 将第4个路径加入环境变量 LIB
    如果还有类似 “LINK : fatal error LNK1181: 无法打开输入文件“ws2_32.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步中已经编译成功。

  • 那么这个 "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 ↩︎

Windows环境下用nmake编译libevent相关推荐

  1. Windows环境下使用CMake编译OpenCV3.0和OpenCV_contrib

    Debug版本库: opencv_aruco331d.lib opencv_bgsegm331d.lib opencv_bioinspired331d.lib opencv_calib3d331d.l ...

  2. java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile...

    进程间的通信方式有很多种, 上次我们说了最傻瓜的"共享外存/文件"的方法. 那么, 在本文中, 我们即将学习"共享内存"的方式实现进程间的通信, 这是IPC最快 ...

  3. windows环境中利用NMake工具编译连接C++源代码

    这篇文章是上一篇文章(http://www.cnblogs.com/LCCRNblog/p/4532643.html)的补充,因此需要先看看上一篇文章. 最近在写代码的时候,需要通过命令的方式来执行生 ...

  4. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  5. DeepLearning:windows环境下C++环境实现Tensorflow编译部署

    [写在前面] 都说深度学习的这条大船上来了就应该不惧风雨,可是在配置环境这条路上的坑真是刚出旧坑又入新坑,2021年最后一天了.想想rensorflow的源代码在windows 环境下的编译历程,就忍 ...

  6. windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题

    之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题.得到了下面的编译报错信息: Build command fail ...

  7. Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)

    Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(畅销10年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 75 ...

  8. 琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记

    琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记 2011年12月20日 基础篇 第1章 背景知识 1 1.1 Win32的软硬件平台 1.1.1 80x86系列处理器简史 1.1 ...

  9. Windows环境下32位汇编语言程序设计(典藏版)

    <Windows环境下32位汇编语言程序设计(典藏版) > 基本信息 作者: 罗云彬 出版社:电子工业出版社 ISBN:9787121207594 上架时间:2013-7-8 出版日期:2 ...

  10. Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI

    Windows环境下Unicode编程总结 UNICODE环境设置 在安装Visual Studio时,在选择VC++时需要加入unicode选项,保证相关的库文件可以拷贝到system32下. UN ...

最新文章

  1. PO_标准内部请购内部采购单抛转订单模组(流程)
  2. BCH综述:数以百万计的商人,更多的代币和冲突的愿景
  3. php调用selenium,从php调用python selenium
  4. 共享打印机出错,错误代码0x00000bcb解决方法汇总
  5. leetcode旋转数组 c语言,leetcode explore 初级算法第三题,旋转数组代码实现
  6. python知识:@classmethod和@staticmethod的异同
  7. php 实现贪吃蛇游戏,HTML5 贪吃蛇游戏实现思路及源代码_html5教程技巧
  8. 使用JavaScript实现长方形、直角三角形、平行四边形、等腰三角形、倒三角、数字三角形...
  9. 基于SSM的旅游信息平台
  10. python表白代码-表白python代码
  11. Linux 计算器程序
  12. python视频教程唐学韬-python
  13. Win10 全屏截图快捷键
  14. 计算机大赛鼓励语录,比赛加油鼓励经典语录
  15. JustinMind
  16. Zabbix6.2这些新特性太棒了,手把书教你在Linux部署Zabbix6.2,速度收藏!
  17. 中间继电器DZY-204/DC110V
  18. python txt文件常用读写操作
  19. 【C/C++学习笔记】C++11 random 随机数(TR1)
  20. 系统出错,发生系统错误1067

热门文章

  1. python 手机号码归属地 软件,Python查询手机号码归属地几种方法
  2. ubuntu 刷新频率 如何查看_ubuntu如何调整显示的分辨率和刷新率?
  3. 2019网易雷火笔试编程题
  4. OpenCV3历程(4)——寻找直线的十字交叉点
  5. CASS删除分幅后图框内部十字丝
  6. 卸载北信源桌面监控攻略Uninstall VRV
  7. linux中UDP编程
  8. widevine level1测试视频的生成方法
  9. Python获取最新省市区列表并绘制中国地图(含港澳台)
  10. 成品app直播源码,设置ViewPager不可滑动