歡迎您光臨本站 註冊首頁

在Win32下編譯openvpn-2.1_rc15

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

在Win32下編譯openvpn-2.1_rc15

一、下載必要的軟體包
1)openvpn-2.1-rc15, 在www.openvpn.org
2)openssl,在www.openssl.org下載openssl-0.9.8i.tar.gz
3)lzo,文件名為lzo-2.03.tar.gz
4)ActivePerl-5.8.0.806-MSWin32-x86.msi (編譯openssl用的,下載后雙擊安裝,默認安裝目錄: C:\Perl)

二,編譯openssl
   進入dos,在openssl根目錄下
   〉Perl Configure VC-WIN32     (注意VC-WIN32要大寫)
   〉ms\do_ms
     dos下進入安裝vc的目錄,找到vcvars32.bat,運行它(一般在安裝路徑的VC98/bin下)
     dos下進入openssl根目錄下,執行 nmake -f ms\ntdll.mak
     開始編譯
    如果編譯成功,會生成inc32目錄(下面包含我們需要的頭文件),lib和dll輸出在out32dll目錄下
    包括libeay32.dll,libeay32.lib,ssleay32.dll,ssleay32.lib)
   
三、編譯lzo
        dos下進入安裝vc的目錄,找到vcvars32.bat,運行它(一般在安裝路徑的VC98/bin下)
        切換到lzo的根目錄
        運行b\win32\vc.bat,成功后在lzo的根目錄下會有lzo2.lib(可能是靜態庫,因為沒有生成lzo2.dll,^-^)
        
四、編譯openvpn
        1)用vc2003生成一個控制台工程,並將工程種原有的文件刪除(stdafx.h stdafx.cpp 還有一個xx.cpp)
        將openvpn根目錄下所有的.h .c文件全部加入到工程
        在工程下新建include, lib目錄
        例如 d:\openvpn\include d:\openvpn\lib
        將openssl中inc32目錄下的openssl目錄全部CP到d:\openvpn\include下
        將lzo中的include目錄下的lzo目錄全部CP到d:\openvpn\include下
        將lzo2.lib, libeay32.lib, ssleay32.lib複製到d:\openvpn\lib下
        
        2)設置工程:C/C++選項中設置--常規--附加包含目錄中加上:d:\openvpn\include(相對路徑更好)
        鏈接器--常規--附加庫目錄中加上d:\openvpn\lib
        鏈接器--輸入--附加依賴項加入
        lzo2.lib
        ssleay32.lib
        libeay32.lib
        ws2_32.lib
        iphlpapi.lib
        crypt32.lib
        Wininet.lib        
        
               
        3)修改config-win32.h
        // 換個順序
        #include <winsock2.h>
       #include <windows.h>
       註釋掉
       #include "autodefs/defs.h"

     給下面這些字義加上""號
     #define PACKAGE "openvpn"
     #define PACKAGE_NAME "OpenVPN"
     #define PACKAGE_TARNAME "openvpn"
     #define PACKAGE_VERSION "2.1_rc15"
     .......
     在這裡
     #ifdef _MSC_VER
        /* MSVC++ hacks */
        #include <io.h>
        #include <direct.h>
        #define vsnprintf _vsnprintf
        #define vsnwprintf _vsnwprintf
        #define snwprintf _snwprintf
        // 加下面一句
        #define strcasecmp _stricmp


  4)在RELEASE版本下,還要去掉memcmp.c文件

  5)編譯,如果出現錯誤根據情況排錯吧! 我的是成功了,祝各位好運

[ 本帖最後由 fly6 於 2008-12-19 09:09 編輯 ]
《解決方案》

照上面的方法我又在vista下面弄了一次,但運行時出錯,調試時發現
verify_callback (int preverify_ok, X509_STORE_CTX * ctx)函數中
  session->verified = true;
//free ( subject);出錯!因為subject是在dll中分配的,但是奇怪,難道linux的內存管理就不會出錯
  OPENSSL_free(subject);//只好改成這句了

[火星人 ] 在Win32下編譯openvpn-2.1_rc15已經有483次圍觀

http://coctec.com/docs/service/show-post-25411.html