Windows下MinGW+Cmake编译n2n v2(2.6)
这次来编译官方的2.6版本(也就是v2的最新版)
环境准备
环境
Windows下的MinGW+Cmake安装这里就略了,可以参考之前的文章:Windows下使用MinGW+Cmake编译n2n
这次2.6版本加入了AES加密的功能,所以需要OpenSSL:点此跳转
方便起见,直接上下载地址(OpenSSL v1.1.1f)吧,32位,64位
一路下一步即可~
代码
https://github.com/ntop/n2n/archive/2.6.zip
开始
比如解压到 C:\n2n-2.6
目录
运行 C:\MinGW\msys\1.0\msys.bat ,执行
cd /c/n2n-2.6/
mkdir build
cd build
cmake -G "MSYS Makefiles" ..
没问题,OpenSSL也找到了,开始编译,执行
make
擦,果然,一堆的warning和error……warning可以暂时忽略,直接看error
比如,edge_utils.c:965:6: error: unknown type name 'u_int8_t'
代码中使用了一个未知的结构名称u_int8_t
打开edge_utils.c
,头部指定一下
typedef unsigned char u_int8_t;
保存,重新 make
完成 build目录下已编译好 edge.exe\supernode.exe\n2n-benchmark.exe
测试
因为默认编译启用了AES加密,所以需要用到相关的dll
p.s 我这边不知道为啥,即便cmake时使用DOPENSSL_USE_STATIC_LIBS指定了静态链接,运行exe也还是需要dll,路过的大佬请指教……
复制 OpenSSL 安装目录下的 libcrypto-1_1.dll 到edge.exe 同目录下,并改名为 libcrypto.dll
我这里是C:\Program Files (x86)\OpenSSL-Win32\libcrypto-1_1.dll
build 目录下运行 edge.exe -h
OK了,不过代码里的版本号还是 2.5.1,太着急发布所以没改版本号吗……
关闭AES
如果不需要AES加密(同时也就不需要libcrypto.dll),可以修改 CMakeLists.txt
里,第10行左右
OPTION(N2N_OPTION_AES "USE AES" ON)
修改为
OPTION(N2N_OPTION_AES "USE AES" OFF)
删除build目录下所有文件,重新编译
cmake -G "MSYS Makefiles" ..
make
即可得到不支持AES加密的edge(没有 -A 参数)
8 条评论
C:/Users/igoogle/Desktop/Download/n2n-3.1.1/n2n-3.1.1/win32/n2n_win32.h:27:20: fatal error: ws2def.h: No such file or directory
#include
^
compilation terminated.
make[2]: *** [win32/CMakeFiles/n2n_win32.dir/wintap.c.obj] Error 1
make[2]: Leaving directory `/c/Users/igoogle/Desktop/Download/n2n-3.1.1/n2n-3.1.1/build’
make[1]: *** [win32/CMakeFiles/n2n_win32.dir/all] Error 2
make[1]: Leaving directory `/c/Users/igoogle/Desktop/Download/n2n-3.1.1/n2n-3.1.1/build’
make: *** [all] Error 2make
博主在吗?请问这个怎么解决
c:/n2n/n2n/src/n2n_regex.c:61:59: error: ‘CHAR’ redeclared as different kind of symbol
enum { UNUSED, DOT, BEGIN, END, QUESTIONMARK, STAR, PLUS, CHAR, CHAR_CLASS, INV_CHAR_CLASS, DIGIT, NOT_DIGIT, ALPHA, NOT_ALPHA, WHITESPACE, NOT_WHITESPACE, /* BRANCH */ };
^~~~
In file included from c:\mingw\include\windef.h:269:0,
from c:\mingw\include\windows.h:42,
from c:\mingw\include\winsock.h:52,
from c:\mingw\include\winsock2.h:62,
from c:\mingw\include\ws2tcpip.h:19,
from c:\n2n\n2n\win32\wintap.h:12,
from C:/n2n/n2n/include/n2n.h:144,
from c:/n2n/n2n/src/n2n_regex.c:53:
c:\mingw\include\winnt.h:91:15: note: previous declaration of ‘CHAR’ was here
typedef char CHAR;
^~~~
make[2]: *** [CMakeFiles/n2n.dir/src/n2n_regex.c.obj] Error 1
make[2]: Leaving directory `/c/n2n/n2n/build’
make[1]: *** [CMakeFiles/n2n.dir/all] Error 2
make[1]: Leaving directory `/c/n2n/n2n/build’
make: *** [all] Error 2
按照你给的 教程 添加了 过后 果然又遇到新问题了
^~~~~~~~~~~~~~~~
c:/n2n/n2n/win32/wintap.c:336:8: note: each undeclared identifier is reported only once for each function it appears in
c:/n2n/n2n/win32/wintap.c: In function ‘tuntap_write’:
c:/n2n/n2n/win32/wintap.c:366:8: error: ‘ERROR_IO_PENDING’ undeclared (first use in this function)
case ERROR_IO_PENDING:
^~~~~~~~~~~~~~~~
make[2]: *** [win32/CMakeFiles/n2n_win32.dir/wintap.c.obj] Error 1
make[2]: Leaving directory `/c/n2n/n2n/build’
make[1]: *** [win32/CMakeFiles/n2n_win32.dir/all] Error 2
make[1]: Leaving directory `/c/n2n/n2n/build’
make: *** [all] Error 2
我用这个编译的最新版本的 但是报这个错 麻烦帮忙翻译一下吧
@超级汉堡
https://bugxia.com/611.html 看这篇的最后
—–
顺便提一下,解决这个问题,你可能还会遇到更多的问题
不再推荐使用msys编译最新版的n2n
@Bug侠
我是按照你的教程来的 还有什么方法呢?
现在都2.8的版本了 楼主能不能更新一下
@超级汉堡
我现在在用VS2017编译,几乎直出exe
@Bug侠
请问怎么用VS编译2.8版本的啊?