Windows下MinGW+Cmake编译n2n v2(2.6)

Linux, N2N, 折腾 2020/04/08

这次来编译官方的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

    我用这个编译的最新版本的 但是报这个错 麻烦帮忙翻译一下吧

    • Bug侠 评论于 回复

      @超级汉堡
      https://bugxia.com/611.html 看这篇的最后
      —–
      顺便提一下,解决这个问题,你可能还会遇到更多的问题
      不再推荐使用msys编译最新版的n2n

      • 超级汉堡 评论于 回复

        @Bug侠
        我是按照你的教程来的 还有什么方法呢?

  • 超级汉堡 评论于 回复

    现在都2.8的版本了 楼主能不能更新一下

    • Bug侠 评论于 回复

      @超级汉堡
      我现在在用VS2017编译,几乎直出exe :笑哭:

      • ll 评论于 回复

        @Bug侠
        请问怎么用VS编译2.8版本的啊?

    评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)