记录一下N2N Windows下的服务端、客户端的编译过程。。
这里使用的是n2n官方2.8稳定版。
N2N 2.8链接:https://github.com/ntop/n2n/tree/2.8-stable

文章结尾附送 TAP drivers


环境:

Windows 10 build 2004
Visual Studio 2019
OpenSSL 点击转跳
C++make for win (我用的x86的) 下载链接: x86 x64


代码:

https://github.com/ntop/n2n/archive/2.8.zip


开始

首先安装Cmake和Openssl。
安装完毕后解压源码,比如解压到 e:\n2n-2.8 目录

e:
cd n2n-2.8
md build
cd build
cmake ..


没问题,开始编译,执行

MSBuild edge.vcxproj /t:Build /p:Configuration=Release


(第一个遇到的坑,,因为这个我绕了一大圈弯路。。。)
报错

E:\n2n-2.8\include\n2n.h(42,10): fatal error C1083: 无法打开包括文件: “config.h”: No such file or directory [E:\n2n-2.8\build\edge_utils_win32.vcxproj]
已完成生成项目“E:\n2n-2.8\build\edge_utils_win32.vcxproj”(默认目标)的操作 - 失败。

项目“E:\n2n-2.8\build\edge.vcxproj”(1)正在节点 1 上生成“E:\n2n-2.8\build\n2n.vcxproj”(4) (默认目标)。
项目“E:\n2n-2.8\build\n2n.vcxproj”(4)正在节点 1 上生成“E:\n2n-2.8\build\win32\n2n_win32.vcxproj”(5) (默认目标)。
PrepareForBuild:
  正在创建目录“n2n_win32.dir\Release\”。
  正在创建目录“E:\n2n-2.8\build\win32\Release\”。
  正在创建目录“n2n_win32.dir\Release\n2n_win32.tlog\”。
InitializeBuildStatus:
  正在创建“n2n_win32.dir\Release\n2n_win32.tlog\unsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
  Building Custom Rule E:/n2n-2.8/win32/CMakeLists.txt
ClCompile:
  C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.27.29110\bin\HostX64\x64\CL.exe /c /I"C:\Program Files\OpenSSL-Win64\include" /I"E:\n2n-2.8\." /I"E:\n2n-2.8\include" /I"E:\n2n-2.8\win32" /W3 /WX- /diagnostics:column /O2 /Ob2 /D WIN32 /D _WINDOWS /D NDEBUG /D CMAKE_BUILD /D "GIT_R
  ELEASE=\"\"" /D "PACKAGE_VERSION=\"2.7.0\"" /D "PACKAGE_OSNAME=\"Windows-10.0.19041\"" /D "N2N_VERSION=\"2.7.0\"" /D "N2N_OSNAME=\"Windows-10.0.19041\"" /D N2N_HAVE_AES /D "CMAKE_INTDIR=\"Release\"" /D _MBCS /Gm- /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"n2n_win32.dir\Release\\" /Fd"n2n_win32.di
  r\Release\n2n_win32.pdb" /Gd /TC /errorReport:queue "E:\n2n-2.8\win32\getopt1.c" "E:\n2n-2.8\win32\getopt.c" "E:\n2n-2.8\win32\wintap.c"
  用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.27.29111 版
  getopt1.c
  版权所有(C) Microsoft Corporation。保留所有权利。
  cl /c /I"C:\Program Files\OpenSSL-Win64\include" /I"E:\n2n-2.8\." /I"E:\n2n-2.8\include" /I"E:\n2n-2.8\win32" /W3 /WX- /diagnostics:column /O2 /Ob2 /D WIN32 /D _WINDOWS /D NDEBUG /D CMAKE_BUILD /D "GIT_RELEASE=\"\"" /D "PACKAGE_VERSION=\"2.7.0\"" /D "PACKAGE_OSNAME=\"Windows-10.0.19041\"" /D "N2N_VERSION=\"2.7.0\
  "" /D "N2N_OSNAME=\"Windows-10.0.19041\"" /D N2N_HAVE_AES /D "CMAKE_INTDIR=\"Release\"" /D _MBCS /Gm- /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"n2n_win32.dir\Release\\" /Fd"n2n_win32.dir\Release\n2n_win32.pdb" /Gd /TC /errorReport:queue "E:\n2n-2.8\win32\getopt1.c" "E:\n2n-2.8\win32\getopt.c" "E
  :\n2n-2.8\win32\wintap.c"
  getopt.c
  wintap.c
E:\n2n-2.8\include\n2n.h(42,10): fatal error C1083: 无法打开包括文件: “config.h”: No such file or directory [E:\n2n-2.8\build\win32\n2n_win32.vcxproj]
  正在生成代码...
已完成生成项目“E:\n2n-2.8\build\win32\n2n_win32.vcxproj”(默认目标)的操作 - 失败。

已完成生成项目“E:\n2n-2.8\build\n2n.vcxproj”(默认目标)的操作 - 失败。

已完成生成项目“E:\n2n-2.8\build\edge.vcxproj”(Build 个目标)的操作 - 失败。

生成失败。

“E:\n2n-2.8\build\edge.vcxproj”(Build 目标) (1) ->
“E:\n2n-2.8\build\edge_utils_win32.vcxproj”(默认目标) (3) ->
(ClCompile 目标) ->
  E:\n2n-2.8\include\n2n.h(42,10): fatal error C1083: 无法打开包括文件: “config.h”: No such file or directory [E:\n2n-2.8\build\edge_utils_win32.vcxproj]

“E:\n2n-2.8\build\edge.vcxproj”(Build 目标) (1) ->
“E:\n2n-2.8\build\n2n.vcxproj”(默认目标) (4) ->
“E:\n2n-2.8\build\win32\n2n_win32.vcxproj”(默认目标) (5) ->
  E:\n2n-2.8\include\n2n.h(42,10): fatal error C1083: 无法打开包括文件: “config.h”: No such file or directory [E:\n2n-2.8\build\win32\n2n_win32.vcxproj]

后来去github看issues也发现一个歪果仁也遇到这个问题。最后给出一个解决办法。(确认有效)

--- a/include/n2n.h
+++ b/include/n2n.h
@@ -38,11 +38,7 @@
 #ifdef WIN32
 #include "win32/n2n_win32.h"

-#ifdef _MSC_VER
-#include "config.h" /* Visual C++ */
-#else
 #include "win32/winconfig.h"
-#endif
 #define N2N_CAN_NAME_IFACE 1
 #undef N2N_HAVE_DAEMON
 #undef N2N_HAVE_SETUID

按照上面说的修改下n2n.h重新编译。
继续执行

MSBuild edge.vcxproj /t:Build /p:Configuration=Release


哎, 又出错了。
原因后面也找到了,安装OPENSSL的时候 建议一起安装X86和X64,我当时只安装了X86的结果报错。。。。了半天。。。
安装openssl x64后 重新编译。

E:\n2n-2.8\build>MSBuild edge.vcxproj /t:Build /p:Configuration=Release
用于 .NET Framework 的 Microsoft (R) 生成引擎版本 16.7.0+b89cb5fde
版权所有(C) Microsoft Corporation。保留所有权利。

生成启动时间为 2020/8/26 22:21:51。
项目“E:\n2n-2.8\build\edge.vcxproj”在节点 1 上(Build 个目标)。
项目“E:\n2n-2.8\build\edge.vcxproj”(1)正在节点 1 上生成“E:\n2n-2.8\build\ZERO_CHECK.vcxproj”(2) (默认目标)。
InitializeBuildStatus:
  正在创建“x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
  所有输出均为最新。
FinalizeBuildStatus:
  正在删除文件“x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”。
  正在对“x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:\n2n-2.8\build\ZERO_CHECK.vcxproj”(默认目标)的操作。

.....

已完成生成项目“E:\n2n-2.8\build\edge.vcxproj”(Build 个目标)的操作。

已成功生成。

一大堆警告路过。。。。。

    157 个警告
    0 个错误

已用时间 00:00:06.72

嗯哼 编译过去了 (开心)
继续编译SuperNode

MSBuild supernode.vcxproj /t:Build /p:Configuration=Release

E:\n2n-2.8\build>MSBuild supernode.vcxproj /t:Build /p:Configuration=Release
用于 .NET Framework 的 Microsoft (R) 生成引擎版本 16.7.0+b89cb5fde
版权所有(C) Microsoft Corporation。保留所有权利。

生成启动时间为 2020/8/26 22:26:03。
项目“E:\n2n-2.8\build\supernode.vcxproj”在节点 1 上(Build 个目标)。
项目“E:\n2n-2.8\build\supernode.vcxproj”(1)正在节点 1 上生成“E:\n2n-2.8\build\ZERO_CHECK.vcxproj”(2) (默认目标)。
InitializeBuildStatus:
  正在创建“x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
  所有输出均为最新。
FinalizeBuildStatus:
  正在删除文件“x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”。
  正在对“x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:\n2n-2.8\build\ZERO_CHECK.vcxproj”(默认目标)的操作。

项目“E:\n2n-2.8\build\supernode.vcxproj”(1)正在节点 1 上生成“E:\n2n-2.8\build\edge_utils_win32.vcxproj”(3) (默认目标)。
。。。。。。飘过N行
已完成生成项目“E:\n2n-2.8\build\supernode.vcxproj”(Build 个目标)的操作。

已成功生成。

。。。。。。飘过N行警告

    8 个警告
    0 个错误

已用时间 00:00:02.46

嗯 编译完成 。

这个呢。。。 只是记录下 突然想玩玩N2N 仅此而已。。。

附:

tap-windows-9.21.2.exe(一键包) http://build.openvpn.net/downloads/releases/tap-windows-9.21.2.exe

tap-windows-9.21.2.zip(手动包) http://build.openvpn.net/downloads/releases/tap-windows-9.21.2.zip

参考文章:
https://github.com/ntop/n2n/blob/dev/doc/Building.md
https://github.com/ntop/n2n/issues/366

最后修改:2023 年 11 月 22 日
如果觉得我的文章对你有用,请随意赞赏