CentOS下交叉编译Windows N2N服务端及客户端
记录一下N2N Linux下的服务端、客户端,以及在CentOS下交叉编译Windows版本的N2N。
这里使用的是n2n的一个分支,有v1和v2两个版本,以v2版本为例,编译过程均基于CentOS 7 64bits
其他系统参阅:https://github.com/meyerd/n2n/wiki/Compilation
此文已过于陈旧,不推荐使用此版本N2N
Linux
yum install cmake make openssl openssl-devel gcc-c++ git -y
git clone https://github.com/meyerd/n2n.git
cd n2n/n2n_v2
cmake ./
make && make install
查看版本
Windows
在CentOS 64bits下交叉编译Windows版本稍微有些复杂,关键步骤也就那几步
#安装环境
yum install mingw64-gcc-c++.x86_64 cmake openssl openssl-devel gcc-c++ git make -y
git clone https://github.com/meyerd/n2n.git
git源码到本地之后,需要做一些小调整,否则有各种问题。
还是以v2版本为例,先将v2的源码移动到上级目录,然后返回到n2n目录
cd n2n/n2n_v2
mv * ..
cd ..
修改cmake/CMakeToolchainFileMingw32.cmake文件,将原有的i686-mingw32-gcc两行替换为:
SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
接着在n2n目录下新建编译文件夹build,开始编译
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/CMakeToolchainFileMingw32.cmake --build ./ ../
make
等待编译完成后,build目录下就有Windows版的客户端(edge.exe)及服务端(supernode.exe)
已编译好的Windows程序:
https://file.bugxia.com/s/b6MAp6LS78b6XBp
压缩包中包含了v1、v2版本的客户端和服务端,还有客户端需要安装的虚拟网卡TapV9
46 条评论
大佬,现在n2n,使用的https://github.com/ntop/n2n 这个仓库,有没有这个的多平台安装呢?谢谢
n2n的git炸了
难搞,大佬能帮帮忙看看么
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/CMakeToolchainFileMingw32.cmake –build ./ ../ — The C compiler identification is GNU 4.9.3 — The CXX compiler identification is GNU 4.9.3 — Check for working C compiler: /usr/bin/x86_64-w64-mingw32-gcc– Check for working C compiler: /usr/bin/x86_64-w64-mingw32-gcc — works — Detecting C compiler ABI info — Detecting C compiler ABI info – done — Detecting C compile features — Detecting C compile features – done — Check for working CXX compiler: /usr/bin/x86_64-w64-mingw32-g++ — Check for working CXX compiler: /usr/bin/x86_64-w64-mingw32-g++ — works — Detecting CXX compiler ABI info — Detecting CXX compiler ABI info – done — Detecting CXX compile features — Detecting CXX compile features – done — Configuring done — Generating done — Build files have been written to: /root/n2n/build
In file included from /root/n2n/win32/wintap.c:5:0: /root/n2n/win32/../n2n.h:64:19: fatal error: netdb.h: No such file or directory #include
build git:(master) ✗ cat ../cmake/CMakeToolchainFileMingw32.cmake # the name of the target operating system SET(CMAKE_SYSTEM_NAME Windows) # which compilers to use for C and C++ #SET(CMAKE_C_COMPILER i686-mingw32-gcc) #SET(CMAKE_CXX_COMPILER i686-mingw32-g++) SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) # here is the target environment located SET(CMAKE_FIND_ROOT_PATH ${HOME}/usr/x86_64-w64-mingw32/bin) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search # programs in the host environment #set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) #set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) #set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
@he
图
https://ae01.alicdn.com/kf/Hc4737a2725c6491e9b6f1764c9cfeabeh.png
@he
【fatal error: netdb.h: No such file or directory】
找不到netdb.h这个头文件
—————
我也没遇到过这问题,估计是C编译器哪一块的问题,有人说安装ibc6-dev即可解决
我这边没法测试,你再找找方法
@he
实在不行,windows下的编译方法:https://bugxia.com/611.html
大佬,我又来了。我按你的教程用ubuntu编译了一个WIN的客户端和服务端,然后把,服务端挂在了一个win2008的服务器上。但是我发现,实际使用中客户端老是出ERROR: recvfrom failed with No error。不久后,服务器上的supernode也出了个类似的错误 然后挂掉了- – 是supernode挂在WIN上不稳定?还是我编译出了什么差错?请问有什么好的建议么?
@安抚
是不是V2S跟win10 1803有冲突? 我试着用了新的N2N版本 好像就不会有这个 错误了,或者只是不显示
@安抚
这个错误之前在https://bugxia.com/475.html下回复你了,如果是Win服务器的话,有可能是防火墙没放行UDP包导致的,检查一下防火墙对supernode的放行设置
服务器在那里
@felice
什么服务器?
博主,我在搬瓦工上,完全按照你的方法编辑windows下的n2n时,进行到cmake时,出现如下错误:
— The C compiler identification is unknown
— The CXX compiler identification is unknown
— Check for working C compiler: x86_64-w64-mingw32-gcc
CMake Error: your C compiler: “x86_64-w64-mingw32-gcc” was not found.
… …
缺少一些东西,所以没有进行完成。
不知博主可否编辑这里的n2n-v2?这个是官方的,最近刚更新成2.5版本,与这里版本(我们叫他v2s)是不兼容的。
https://github.com/ntop/n2n
@lucktu
嗯,看错误日志大致意思是x86_64-w64-mingw32-gcc编译器没有找到,应该是安装过程中出了什么问题。这个得具体看,没法远程分析。
我都没怎么关注,官方居然出了新的,我这就去研究研究。
第一条命令可以用这个“yum install cmake openssl openssl-devel gcc-c++ git -y”
@欧阳
感谢感谢,因为本来有git和gcc,所以根本没注意到。
@Bug侠
我感觉应该+上防火墙添加端口的方法 我就为了防火墙折腾了好久
@欧阳
呃……我都是在非生产环境下测试的,所以一上来第一件事就是关闭iptables关闭firewall。也是忽略了这个问题。一会儿就去加上。
无限错误提示!怎么解决?
edge_v2.exe -a 192.168.100.100 -c bugxia -k 123456 -l 88.88.88.88:3456
中间这段192.168.100.100每个人必须一样吗?还是不能一样
@冰皇
每个人的ip地址需要不一样,一样就冲突了
@Bug侠
怎么写才能让他随机分配
@冰皇
客户端随机分配,易语言取随机数()
@Bug侠
emmmm最高255的IP地址,怎么设置?话说必须在同一网段才能联机么,192.168.100.x,x取随机数的话要怎么写。。。。,我已经把你的源码拆到我的源码上了,写个重启,然后分配吗?可是这个随机数不会写,因为X在尾部
@冰皇
同段才可以互通。取随机数(1,255)
@Bug侠
能不能上线帮我一下,我就缺这个了
@冰皇
我上线了
@Bug侠
找到问题了,是你的隐藏窗口代码问题
@冰皇
找到就好
@Bug侠
可是把你代码删了,edge.exe就不会出现在进程里面了,上线看看
@Bug侠
写得我的魂都快飞了,终于搞定了
@Bug侠
还有件事,想请你帮忙,我留言给QQ了
执行cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/CMakeToolchainFileMingw32.cmake –build ./ ../怎么出现错误?
@冰皇
报什么错?
@Bug侠
留下你的邮箱地址,我截图给你看
@Bug侠
已经发送到系统邮箱了,麻烦了
@Bug侠
错误(10002): 指定子程序或类方法名称“创建图标”未找到。
@Bug侠
请问每个人的虚拟地址必须一样吗?