Windows平台编译openvpn

来源:互联网 发布:淘宝日系男装店铺推荐 编辑:程序博客网 时间:2024/03/29 13:05

Windows平台编译openvpn

分享
2008-09-17 11:25
Windows平台编译openvpn
环境:
windows xp sp2
mingw5.0.3
openssl0.9.7d
lzo2.02
openvpn2.0.7
winddk
安装:
1)Windows xp就不用说了,基本安装
2)Mingw安装也很简单,下载windows平台安装软件安装就可以。最好安装在默认路径c:/MinGW。安装完毕后在path环境变量里添加c:/MinGW/bin。
(我把openssl,lzo,openvpn和winddk都安装在同一个目录下,这样在编写openvpn的makefile文件时比较方便)
3)下载openssl压缩包,解压缩至文件夹openssl-0.9.7d
4)下载lzo压缩包,解压缩至文件夹lzo-2.02
5)下载openvpn,解压至文件夹openvpn-2.0.7
6)下载winddk安装程序安装
编译:
1)编译openssl
a.使用cmd cd到openssl根目录下,执行ms/do_ms
b.Cd到vc98的bin目录下,执行vcvars32.bat(如果在安装vc6的过程中选择了注册环境变量,这一步可以省略)
c.Cd到openssl目录下,执行nmake –f  ms/ntdll.mak
编译成功,可以在out32dll目录下有两个lib和两个dll,分别是libeay32.lib,ssleay32.lib,libeay32.dll,ssleay32.dll。
2)编译lzo
Cd到lzo的根目录下,运行b/win32/vc.bat。lzo的编译文档说如果准备在mingw环境中使用lzo库需要运行mingw.bat,个人认为不需要,因为mingw是可以使用lib库的,所以将lzo编译成lib库就可以了。编译成功后会在lzo的根目录下看到lzo2.lib。
3)编译openvpn(最关键的一步)
a.进入openvpn的根目录,修改makefile.w32
b.Makefile.w32内容如下:
#指定openvpn使用的外部库的路径,dmalloc是需要使用内存debug时的库,我没#有使用,下面的配置无效
OPENSSL = ../openssl-0.9.7d
LZO = ../lzo-2.02
DDK = ../../WINDDK
DMALLOC = /c/src/dmalloc-5.4.2

CC = gcc -g -O2 -Wall -Wno-unused-function -Wno-unused-variable -mno-cygwin

CC_DMALLOC = gcc -g -O2 -Wall -Wno-unused-function /
-Wno-unused-variable -mno-cygwin -fno-inline -DDMALLOC

#指定include路径,包括openssl,lzo和winddk的
INCLUDE_DIRS = -I${OPENSSL}/inc32 /
-I${LZO}/include -I${WINDDK}/3790.1830/inc/wxp

INCLUDE_DIRS_DMALLOC = ${INCLUDE_DIRS} -I${DMALLOC}

LIBS_DMALLOC = ${LIBS} -ldmalloc

#指定lib路径,包括openssl,lzo和winddk的
LIB_DIRS = -L${OPENSSL}/out32dll -L${LZO} /
-L${DDK}/3790.1830/lib/wxp/i386 -L${DDK}/3790.1830/lib/crt/i386

LIB_DIRS_DMALLOC = ${LIB_DIRS} -L${DMALLOC}

#将要生成的EXE文件的名称
EXE = openvpn.exe

#使用的所有的头文件
HEADERS = /
base64.h /
basic.h /
buffer.h /
circ_list.h /
common.h /
tap-win32/common.h /
        config-win32.h /
crypto.h /
cryptoapi.h /
errlevel.h /
error.h /
event.h /
        fdmisc.h /
forward-inline.h /
forward.h /
fragment.h /
        gremlin.h /
helper.h /
init.h /
integer.h /
interval.h /
list.h /
lzo.h /
manage.h /
mbuf.h /
memdbg.h /
misc.h /
mroute.h /
mss.h /
mtcp.h /
mtu.h /
mudp.h /
multi.h /
ntlm.h /
occ-inline.h /
occ.h /
        openvpn.h /
openvpn-plugin.h /
options.h /
otime.h /
packet_id.h /
perf.h /
ping-inline.h /
ping.h /
plugin.h /
pool.h /
        proto.h /
proxy.h /
push.h /
reliable.h /
route.h /
schedule.h /
session_id.h /
        shaper.h /
sig.h /
socket.h /
socks.h /
ssl.h /
        status.h /
syshead.h /
        thread.h /
tun.h /
win32.h

#生成的obj文件名字
OBJS =  base64.o /
buffer.o /
crypto.o /
cryptoapi.o /
error.o /
event.o /
fdmisc.o /
forward.o /
        fragment.o /
gremlin.o /
helper.o /
init.o /
interval.o /
        list.o /
lzo.o /
manage.o /
mbuf.o /
misc.o /
mroute.o /
mss.o /
mtcp.o /
mtu.o /
mudp.o /
multi.o /
ntlm.o /
occ.o /
        openvpn.o /
options.o /
otime.o /
packet_id.o /
perf.o /
ping.o /
plugin.o /
        pool.o /
proto.o /
proxy.o /
push.o /
reliable.o /
        route.o /
schedule.o /
session_id.o /
shaper.o /
sig.o /
socket.o /
        socks.o /
ssl.o /
status.o /
thread.o /
tun.o /
win32.o

#动态编译
dynamic : MY_CC = ${CC}
dynamic : MY_INCLUDE_DIRS = ${INCLUDE_DIRS}
dynamic : ${OBJS}
${MY_CC} -o ${EXE} ${OBJS} ${LIB_DIRS} -llibeay32 -lssleay32 /
 -llzo2 -lwsock32 -lws2_32 -lcrypt32 -liphlpapi

#静态编译
static : MY_CC = ${CC}
static : MY_INCLUDE_DIRS = ${INCLUDE_DIRS}
static : ${OBJS}
${CC} -o ${EXE} ${OBJS} ${LIB_DIRS} -lssleay32 -llibeay32 -llzo2 /
-lwsock32 -lws2_32 -lcrypt32 -liphlpapi

dmalloc : MY_CC = ${CC_DMALLOC}
dmalloc : MY_INCLUDE_DIRS = ${INCLUDE_DIRS_DMALLOC}
dmalloc : ${OBJS}
${MY_CC} -o ${EXE} ${OBJS} ${LIB_DIRS_DMALLOC} /
 -lssl32 -leay32 ${LIBS_DMALLOC}

clean :
rm -f ${OBJS}

%.o : %.c ${HEADERS}
${MY_CC} ${MY_INCLUDE_DIRS} -c $< -o $@

c.使用cmd cd到openvpn的根目录下执行 mingw32-make –f makefile.w32,
编译成功会在openvpn的根目录下生成openvpn.exe文件

原创粉丝点击