如何在 Windows windows下编译openssl OpenSSL

手把手教你Windows下编译OpenVPN2.1.183
上亿文档资料,等你来发现
手把手教你Windows下编译OpenVPN2.1.183
网络上目前的有关Windows平台下,OpenV;依据我的观点,那就是如果在VS中编译OpenVP;这样的话就很不方便了,而且网上也没有相关的操作说;至于OpenVPN编译的第二种方法,则是我力荐给;------------------------;安装步骤;注意:以下提到的安装路径皆为示例,如无特殊说明,;安装NSIS;下载链接:http://source
网络上目前的有关Windows平台下,OpenVPN的编译方式无非两种,一种就是使用VS2010来编译,第二种就是使用MinGW来编译。 我想作为一名Windows程序员,对VS编译器的钟爱是可以理解的,本人最开始也是使用VS对OpenVPN2.1.1的源代码进行了编译。非常的幸运,虽然有一些编译错误,不过用了不到两天时间就一一解决了。编译通过后,心情舒畅,不过随之而来的一个问题是如何使用呢?如果是下载的OpenVPN的exe安装包,安装完成后,会生成一个虚拟网卡,而且会有gui的界面,简单的改写配置文件后,双击OpenVPN的图标就可以运行了。但是使用VS2010编译OpenVPN的源码包之后,在Debug目录下只生成了一个OpenVPN.exe文件。据我所知,此文件只能用来对OpenVPN进行一些配置工作,对于其他的功能,比如OpenVPN的虚拟网卡是没有办法通过此exe文件生成的。依据我的观点,那就是如果在VS中编译OpenVPN,那么其他周边的功能,需要你自己去下载第三方的软件来完成,比如生成一个虚拟VPN网卡。这样的话就很不方便了,而且网上也没有相关的操作说明,怎么安装,如何配置都需要自己摸索,对于我这等新手而言难度颇大。至于OpenVPN编译的第二种方法,则是我力荐给大家的一种方法,它使用MinGW进行编译,每一步操作的详细说明网上教程都给的非常详细,资料比较多,而且最后生成的exe是一个OpenVPN的安装包,和官方提供的安装包别无二致,所以说,编译好之后,只要双击此安装包,至于安装虚拟VPN网卡等依赖第三方的工作,都可以轻松搞定了。 不过,对于源代码编译而言,一台机子也许就会有一台机子不同的问题,单纯地依赖网上的教程,很多时候没有办法达到我们最终的目的,下面我就讲一下,我的编译过程,其主要的步骤皆来自于互联网,其中补充了我自己在编译过程中遇到的问题,并且给出了解决之道,希望给大家以启发。--------------------------------------安装步骤注意:以下提到的安装路径皆为示例,如无特殊说明,皆可根据实际情况作更改。安装NSIS下载链接:http://sourceforge.net/projects/nsis/files/NSIS2/2.46/nsis-2.46-setup.exe/download正常安装即可。如无必要,请选择完整安装。 安装MinGW下载链接:http://sourceforge.net/projects/mingw/files/Automated MinGW Installer 呃…选择文件列表里的MinGW-5.1.6.exe下载…选择完整安装,安装到D:\MinGW下。 安装MSYS下载链接:http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe选择安装到D:\msys\1.0\目录下。 安装msysDTK下载链接:http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe 和MSYS选择安装在相同位置,D:\msys\1.0\目录下。配置环境变量我的电脑,右键-&属性-&高级-&环境变量,观察窗口上部“XXX的用户环境变量”,看是否有PATH这个环境变量。如果有,双击修改,在最后加上?;c:\MinGW\d:\msys\1.0\bin?(单引号内内容,注意最前面的分号)。如果没有,新建一个,变量名PATH,变量值?c:\MinGW\d:\msys\1.0\bin?(单引号内内容,注意最前面没有分号)完成操作后,开始-&运行,打开cmd窗口,输入bash。如果出现“bash-3.1$”字样,说明环境变量修改成功。输入exit退出bash。下载OpenVPN预编译文件这里的预编译文件不是openvpn本身的预编译文件,而是例如openssl,tap驱动等等openvpn编译过程中需要的二进制文件下载链接:http://openvpn.net/prebuilt/版本不是2.1.1没有关系,因为2.1_rc22到2.1.0的代码变化不多,而2.1.0到2.1.1只是修正了一下内置的rpm打包用的spec文件而已…解压,获得以下目录:gen-prebuiltlzo-2.02openssl-0.9.8lpkcs11-helper将以上4个目录中都复制到C:\下下载OpenVPN GUI二进制文件下载链接:http://openvpn.se/files/binary/openvpn-gui-1.0.3.exe如果想深度定制自己的OpenVPN安装程序,可以自行编译安装OpenVPN GUI,修改源码中的rc文件得到自定义效果。具体就不在这里介绍了下载后在C盘下建立openvpn-gui目录,将openvpn-gui-1.0.3.exe放到这个目录下 下载OpenVPN 2.1.1源码下载链接:http://openvpn.net/release/openvpn-2.1.1.tar.gz下载解压,获得openvpn-2.1.1目录,放到C盘下至此,C盘目录下有如下文件夹:openvpn-2.1.1openvpn-guigen-prebuiltlzo-2.02openssl-0.9.8lpkcs11-helper 如果有缺少目录,请返回前面步骤检查:-)修改编译配置文件注意:下面提到的所有修改文件操作,请一律用“写字板”或其他专业文本编辑器,如gvim,notepad++等打开。 最后一个修改比较复杂。为了减少编译安装的复杂度,就不自己编译tap-win32驱动了,用openvpn提供的prebuilt包里的tapinstall目录来代替。没有找到特别好的办法做这个hack,所以只能这么dirty了。到openvpn-2.1.1\install-win32文件夹,修改openvpn.nsi文件,找到以下代码: ; tap-64bit:DetailPrint “We are running on a 64-bit system.”SetOutPath “$INSTDIR\bin”File “${GEN}\tapinstall\amd64\tapinstall.exe”SetOutPath “$INSTDIR\driver”File “${GEN}\driver\amd64\OemWin2k.inf”File “${GEN}\driver\amd64\${PRODUCT_TAP_ID}.cat”File “${GEN}\driver\amd64\${TAPDRV}”goto tapendtap-32bit:DetailPrint “We are running on a 32-bit system.”SetOutPath “$INSTDIR\bin”File “${GEN}\tapinstall\i386\tapinstall.exe”SetOutPath “$INSTDIR\driver”File “${GEN}\driver\i386\OemWin2k.inf”File “${GEN}\driver\i386\${PRODUCT_TAP_ID}.cat”File “${GEN}\driver\i386\${TAPDRV}”tapend: SectionEnd在这段代码第一行前插入:!undef GEN!define GEN “c:\gen-prebuilt\”在这段代码最后一行后面插入一行:!undef GEN !define GEN “..”可选:给openvpn打补丁如果需要给openvpn打上特殊的补丁,例如openvpn ipv6补丁,可以在这个时候完成。修改openssl、lzo等的路径修改C:\openvpn-2.1.1\install-win32\settings.in找到# Include the OpenVPN GUI exe in the installer.包含各类专业文献、幼儿教育、小学教育、专业论文、行业资料、应用写作文书、文学作品欣赏、外语学习资料、手把手教你Windows下编译OpenVPN2.1.183等内容。 
 Windows下编译OpenVPN 2_IT/计算机_专业资料。Windows 下编译 OpenVPN 2.1.1 77run, 19:41 , 技术大类 ? Win Server , 评论(0) , 引用(0) , 阅读(12...  Windows下编译OpenVPN 2 4页 1下载券 Windows操作系统中利用O... 9页 7下载...192.168.1.1 80 #这里填入你的代理服务器地址和端口 mute-replay-warnings ...  “openvpn_windows 安装软件”文件夹,双击 openvpn-2.1.1-install.exe 文件,安装步骤如下: 点 NEXT 按钮 点 I Agree 按钮 点 NEXT 按钮 点 INSTALL 按钮 ...  192.168.1.1 80 #这里填入你的代理服务器地址和端口 mute-replay-warnings ...1/2 相关文档推荐 windows环境OpenVPN搭建... 8页 免费 windows下利用OpenVPN...  RHEL5.4 下安装 OpenVPN2.1.1 一. 安装环境: 1.软件环境服务端:系统:RHEL...# tun 是三层的点对点协议,限制稍微多一些 ;dev tap dev tun # Windows ...  192.168.1.1 80 #这里填入你的代理服务器地址和端口 mute-replay-warnings ...Windows下编译OpenVPN 2 4页 1下载券 Windows操作系统中利用O... 9页 5下载...  openvpn-2.1.1-install.exe 以下利用公司提前准备好的环境来在 Windows 平台下实现 OpenVpn 虚拟专用网服务器的 搭建;公司准备好的环境条件有: A. 操作系统:...  空工程,然后 把 OpenVPN 的源码拖进去编译一下就...编译 openssl 1) 安装 ActivePerl_5.16.2....删除 config-win32.h 文件中的#include &windows....  192.168.1.1 80 #这里填入你的代理服务器地址和端口 mute-replay-warnings ...Windows下编译OpenVPN 2 4页 1下载券 Windows操作系统中利用O... 9页 7下载...在Windows下用MinGW编译OpenSSL,及OpenSSL静态链接库libcrypto.a使用问题-c/c++-电脑编程网在Windows下用MinGW编译OpenSSL,及OpenSSL静态链接库libcrypto.a使用问题作者:pgplay 和相关&&
最经我用MinGW编译OpenSSL的过程中发生了很多问题,不过好在已经解决了,现在写出来以备查询
以OpenSSL-0.9.8l为例:
前略(下载,解压)注意要安装Perl,如果你只是用来安装OpenSSL的可以下ActivePerl,以后还有其它用的下strawberry-
(先说问题)
使用MinGW编译OpenSSL时我发现有以下问题
1、解压目录\ms\mingw32.bat内的路径有问题,直接使用会报找不到文件
2、编译过程中报错(内容如下)
.\crypto\des\set_key.c:68: error: static declaration of '_hide_DES_check_key' follows non-static declaration .\crypto\des\set_key.c:68: error: previous declaration of '_hide_DES_check_key' was heremingw32-make: *** [tmp\set_key.o] Error 1
3、其它编译问题(我没有遇到,不过似乎官方有准备)
4、使用静态链接库libcrypto.a时
libcrypto.a(rand_win.o)(.text+0xb13):rand_win.c: undefined reference to '_CreateDCA@16'
libcrypto.a(rand_win.o)(.text+0xb24):rand_win.c: undefined reference to '_CreateCompatibleDC@4'
等错误
解决法案:
一、解决这一种问题方法
是将mingw32.bat从 解压目录\ms 下面复制回 解压目录 下面,即将mingw32.bat放在解压后的OpenSSL的根目录下
二、编译过程中出现上述的报错,问题出在 解压目录\e_os2.h 中:264行
  # define OPENSSL_IMPLEMENT_GLOBAL(type,name) \  
extern type _hide_## \type *_shadow_##name(void) { return &_hide_## } \static
type _hide_##name
其中的static
修饰,解决方法有两个:
1、将static
修饰删了,不过这样可能会改变原来作者的意图
2、这个方法有点麻烦需要修改 解压目录\e_os2.h 解压目录\crypto\des\enc_read.c 解压目录\crypto\des\set_key.c这三个文件
=======================================================================================
解压目录\e_os2.h:
定位第255行(参照句出现的行号,并非需要修改的直接行号)做如下操作,每行前的 - 号代表删除行,+ 号代表添加行:
&&& The way it's done allows definitions like this:&& && &&& // in foobar.c
-&&& OPENSSL_IMPLEMENT_GLOBAL(int,foobar) = 0;
+&& OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0)&& &&& // in foobar.h&& &&& OPENSSL_DECLARE_GLOBAL(int,foobar);&& &&& #define foobar OPENSSL_GLOBAL_REF(foobar)&& */&&&&&& #ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION-&&&& # define OPENSSL_IMPLEMENT_GLOBAL(type,name)&&& &&& &&& &&&& \-&&&&&&& extern type _hide_##&&& &&& &&& &&& &&&& \-&&&&&&& type *_shadow_##name(void) { return &_hide_## }&&& &&&& \-&&&&&&& static type _hide_##name+&&& # define OPENSSL_IMPLEMENT_GLOBAL(type,name,value)&&& &&& &&& \  
+&&&&&& type *_shadow_##name(void)&&& &&& &&& &&& &&& \  
+&&&&& { static type _hide_##name= return &_hide_## }&&&&& # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void)&&&&& # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name()))&&&&& #else-&&&& # define OPENSSL_IMPLEMENT_GLOBAL(type,name) OPENSSL_GLOBAL type _shadow_##name+&&& # define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value&&&&& # define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name&&&&& # define OPENSSL_GLOBAL_REF(name) _shadow_##name&&&&& #endif
=======================================================================================
解压目录\crypto\des\enc_read.c
定位第64行(参照句出现的行号,并非需要修改的直接行号)做如下操作,每行前的 - 号代表删除行,+ 号代表添加行:
&&& /* This has some uglies in it but it works - even over sockets. */&&& /**/-&& OPENSSL_IMPLEMENT_GLOBAL(int,DES_rw_mode)=DES_PCBC_MODE;+& OPENSSL_IMPLEMENT_GLOBAL(int,DES_rw_mode,DES_PCBC_MODE);
=======================================================================================
解压目录\crypto\des\set_key.c
定位第66行(参照句出现的行号,并非需要修改的直接行号)做如下操作,每行前的 - 号代表删除行,+ 号代表添加行:
& & #include &des_locl.h&
&&& #ifdef OPENSSL_FIPS&&& #include &openssl/fips.h&&&& #endif-&& OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key);&&& /* defaults to false */+& OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key,0);& & /* defaults to false */
=======================================================================================
三、至于其它编译问题(不是上面的问题,至于是什么问题,我不知道,因为我没有出现过)官方给出的解决办法是,在执行mingw32.bat时添加no-asm参数,即在控制台先执行(转到根目录,或者将根目录添加到 环境变量 中去)
mingw32 no-asm
四、这是因为libcrypto.a需要静态链接Gdi32.lib(libgdi32.a),直接添加Gdi32.lib或libgdi32.a就可以了(一定要添加在libcrypto.a后面,即-I libcrypto.a -I libgdi32.a),使用dllwrap的也可以直接添加-lgdi32参数,使用Code::Blocks的在链接器设置(Linker
Setting)-&链接库(link libraries)的libcrypto.a下方添加libgdi32.a
P.S MinGW(GCC)中没有VC中的#pragma comment预处理命令,它只能用执行参数-I 来添加静态或导入库
相关资料:|||||||在Windows下用MinGW编译OpenSSL,及OpenSSL静态链接库libcrypto.a使用问题来源网络,如有侵权请告知,即处理!编程Tags:                &                    openssl 安装_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
openssl 安装
大小:2.73KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢当前访客身份:游客 [
Follow excellent and the success will chase you!
:不错,看的稀里糊涂
:深入浅出
今日访问:0
昨日访问:31
本周访问:31
本月访问:266
所有访问:3917
Windows下安装OpenSSL及其使用
发表于3年前( 00:03)&&
阅读(1306)&|&评论()
0人收藏此文章,
1.&下载最新版本的Perl,安装后重启系统。
2.下载&latest openssl并解压到C:\openssl-0.9.8k。
参考openssl目录下的install.win32说明进行安装:
1、进入解压目录。
&cd C:\openssl-0.9.8k
2、运行Configure。
&perl Configure VC-WIN32
如不成功会有明显提示。
3、创建Makefile文件。
推荐使用这种方式,另外两种方式&如果使用也必须保证本机有编译器才能使用。
:ms\do_masm&(默认vc&自带的编译器;也也以自己下载安装)
:ms\do_nasm&(需要自己下载)
4、配置VC环境变量。
&cd C:\Program Files\Microsoft Visual Studio\VC98\Bin
&&&vcvars32.bat
5、编译动态链接库。
&cd C:\openssl-0.9.8k
&nmake -f ms\ntdll.mak
可能会缺少“ml.exe”,可下载masm并把其中的ml.exe拷贝至C:\Program Files\Microsoft Visual Studio\VC98\Bin下即可。
运行 nmake -f ms\ntdll.mak test.检查上一部编译是否成功。正常的话会执行编译后的测试程序
至此OpenSSL在windows下编译完成,编译得到的dll和lib文件位置:静态库libeay32.lib和ssleay32.lib位于out32文件夹下,动态库libeay32.dll,libeay32.lib,ssleay32.dll,ssleay32.lib位于out32dll文件夹下。
6、为VC添加头文件和静态链接库路径。
Tools&Options&Directores,在Include files中增加C:\openssl-0.9.8k \inc32目录;在Libray files中增加C:\openssl-0.9.8k\out32dll。
7、编写OpenSSL程序,可参考C:\openssl-0.9.8k\demos
(1)包含相应头文件
#include&&openssl/***.h&
(2)&添加静态链接库
#pragma&comment(lib,&&libeay32.lib&)
#pragma&comment(lib,&&ssleay32.lib&)
或Project&Settings&Link&Object\library modules填写libeay32.lib ssleay32.lib。
(3)将动态链接库ssleay32.dll, libeay32.dll复制到C:\WINDOWS\system32或Debug目录下,确保动态链接库在正确的路径。
可能遇到的问题:
1、NMAKE : fatal error U1077: 'ml' : return code '0x1'
解决办法:在环境变量PATH中添加路径C:\masm32\bin,并按照参考资料3修改ml.exe文件。
2、NMAKE : fatal error U1077: 'cl' : return code '0x2'
解决办法:去掉ipv6(命令行中执行perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0)
3、fatal error LNK1103: debugging recompile module
解决办法:去掉ms文件夹下对应文件nt.mak或ntdll.mak文件中/debug选项
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读

我要回帖

更多关于 openssl 编译 的文章

 

随机推荐