Windows下编译 32位和64位 OpenSSL 2016-04-12
来源:互联网 发布:软件外包人员保密协议 编辑:程序博客网 时间:2024/05/22 14:22
今天由于项目需要,需要编译一个OPENSSL,之前虽然也编译过,但是今天整理下,做个备份,以便日后需要。
- 首先下载源码 https://www.openssl.org/source/ 下载openssl-1.0.1p.tar.gz
- 下载解压到一个目录,最好是英文路径,我的例子D:\opensslsrc32\openssl-1.0.1p
- http://www.activestate.com/activeperl 下载安装 Activestate Perl
- 安装vs2013,现在我用的是最新的vs2013 以前2005也编译过,应该差不多
- 配置好环境变量,参考设置 C:\Perl\site\bin;C:\Perl\bin;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE
- 下面开始编译
- 首先运行cmd 进入C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin,运行vcvars32,这个一定要先执行,不然后来会报错一些.h找不到
- 进入openssl安装目录,依次执行以下命令
perl Configure VC-WIN32 –prefix=C:\opensslbuild32
ms\do_ms
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
如果编译成功,最后的输出都在out32dll目录下:包括可执行文件、两个dll和两个lib文件: libeay32.dll, libeay32.lib, ssleay32.dll, ssleay32.lib
64位版本的编译,和32位差不多
1.设置环境变量,C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64
运行cmd,进入C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64,运行vcvars64.bat。
2.进入d:盘 openssl目录
依次执行以下命令
perl Configure VC-WIN64A –prefix=C:\opensslbuild64
ms\do_win64a
nmake -f ms\ntdll.mak clean
nmake -f ms\ntdll.mak
nmake -f ms\nt.mak clean
nmake -f ms\nt.mak
我在链接OpenSSL的静态函数库时遇到类似以下的问题:
Linking… msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj)
这是由于OpenSSL的静态函数库使用的是了VC的多线程DLL的Release版本,而我的程序使用了多线程静态链接的Release版本。调整OpenSSL的静态函数库使用的库函数版本即可,调整过程如下:
编辑文件 ms\nt.mak,将该文件第19行
“CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE-D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_KRB5-DOPENSSL_NO_DYNAMIC_ENGINE” 中的”/MD”修改为”/MT”。然后重新编译安装OpenSSL即可。
四、附录:在VC中对C/C++ 运行时库不同版本编译指令说明
《在VC中对C/C++ 运行时库不同版本编译指令说明》(http://blog.yesky.com/271/dgkang/1737771.shtml)一文中详细介绍了连接不同版本库的编译指令如下:
C Runtime Library:
/MD MSVCRT.LIB 多线程DLL的Release版本
/MDd MSVCRTD.LIB 多线程DLL的Debug版本
/MT LIBCMT.LIB 多线程静态链接的Release版本
/MTd LIBCMTD.LIB 多线程静态链接的Debug版本
/clr MSVCMRT.LIB 托管代码和非托管代码混合
/clr:pure MSVCURT.LIB 纯托管代码
C++ Standard Library:
/MD MSVCPRT.LIB 多线程DLL的Release版本
/MDd MSVCPRTD.LIB 多线程DLL的Debug版本
/MT LIBCPMT.LIB 多线程静态链接的Release版本
/MTd LIBCPMTD.LIB 多线程静态链接的Debug版本
ms/ntdll.mak ms/nt.mak
14行可以修改输出路径 对于nmake -f ms\ntdll.mak install nmake -f ms\nt.mak install 命令
INSTALLTOP=\usr\local\ssl
OPENSSLDIR=\usr\local\ssl
1. 参考文档http://blog.chinaunix.net/uid-20479991-id-216269.html http://blog.csdn.net/dragoo1/article/details/22398473 http://www.jerryrw.com/howtocompile.php http://blog.csdn.net/pony_maggie/article/details/8588888
http://blog.csdn.net/xhydra/article/details/12517135
- Windows下编译 32位和64位 OpenSSL 2016-04-12
- openssl windows编译 32位&64位
- openssl windows编译 32位&64位
- openssl windows编译 32位&64位
- openssl 编译(32位 64位)
- Windows下编译libxls32位和64位链接库
- windows 下boost 64 位和32位库的编译编译
- GDAL---Windows下32位与64位编译
- Windows平台编译openssl-0.9.8k库(32位、64位)
- Boost在Linux和windows下的编译 32位 64位
- 在windows上编译32位和64位mono
- VS2013编译64位OpenSSL(附32位)
- win7安装openssl,编译32位&64位
- VS2013编译64位OpenSSL
- windows7 64位 编译 openssl
- windows 64位 vs2010 编译安装Openssl 遇到的问题
- 在win7(32位)下 编译 VC6版本OpenSSL
- 64位Win7下用VS2010编译OpenSSL
- SSH框架的应用介绍(spring、struts、hibernate) ---阿冬专栏
- hdu 5095 Linearization of the kernel functions in SVM (简单模拟)
- 每日金銀速遞
- 如何停止处于stopping状态的windows服务
- c++线程池
- Windows下编译 32位和64位 OpenSSL 2016-04-12
- 开发板sqlite数据库的搭建
- Java 删除文件或文件夹
- PHPthinking编程工具正式版发布
- 面向对象和面向组件的区别
- PHP 类中的静态变量的继承
- hdu1870愚人节的礼物之天呐你们为什么要骗我用栈才能过。。。大水题。。。
- java中Date与String的相互转化
- IT项目管理(原书第7版)——互动出版网