VS2008中编译和使用OpenSSL
2015-06-19 14:33
363 查看
一、编译OpenSSL
在编译OpenSSL前,需要正确安装Perl,因为在编译OpenSSL时需要使用到该程序。
下载最新版本的Perl:http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.zip。然后安装之。
下载最新版本的OpenSSL:http://www.openssl.org/source/openssl-0.9.8g.tar.gz
然后将源码释放的c:\openssl-0.9.8g目录中。
首先将VS2008的nmake的环境变量加入的cmd中:
在cmd中执行 *:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat
进入openssl源码目录。
cd c:\openssl-0.9.8.g
运行configure:
perl Configure VC-WIN32 --prefix=c:/openssl
创建Makefile文件:
ms\do_ms
编译动态库:
nmake -f ms\ntdll.mak
编译静态库:
nmake -f ms\nt.mak
测试动态库:
nmake -f ms\ntdll.mak test
测试静态库:
nmake -f ms\nt.mak test
安装动态库:
nmake -f ms\ntdll.mak install
安装静态库:
nmake -f ms\nt.mak install
清除上次动态库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\nt.mak clean
参考: http://blog.chinaunix.net/uid-20479991-id-216269.html
1. 准备:
1.1 安装perl环境, 下载地址: http://dlsw.baidu.com/sw-search-sp/soft/4a/14792/ActivePerl_5.16.2.3010812913.msi
1.2 下载nasm.exe和ndisasm.exe, 地址: http://dldx.csdn.net/fd.php?i=639621962335100&s=3ad4555faf530935e0d6fed04f37fd21
2. 编译
2.1 参考INSTALL.W64文件, To build for Win64/x64: (在dos下执行以下命令)---编译出错,未成功
cd E:\program\opensource\openssl-1.0.1h(openssl源码目录)
perl Configure VC-WIN64A
ms\do_win64a----这里有错误
nmake -f ms\ntdll.mak
cd out32dll
..\ms\test
2.2 参考INSTALL.W32文件, Visual C++:---编译成功,安装成功
perl Configure VC-WIN32 --prefix=D:\opensource\openssl//
prefix指定安装位置
ms\do_nasm// 使用汇编语言文件和NASM
nmake -f ms\ntdll.mak// 将会生成dll文件或可执行文件,在目录out32dll下
2.2.2: 如果想测试下,可以执行: nmake -f ms\ntdll.mak test
3: 安装
将OpenSSL安装到指定的路径: nmake -f ms\ntdll.mak install
注意:
因为要执行nmake命令,但是这个文件所在路径并没有注册到Path环境变量下,所以最好在"Visual Studio 2008命令提示"窗口中操作以上命令.
-------------------------------------------------------------------------
我的系统是win7 64位, 我本来想参考INSTALL.W64文件来编译的,但是中途出错了,出错的文件是ms\uptable.asm,有个"..imagebase"未定义,最终放弃。
最后参考INSTALL.W32文件,成功了!
http://221.231.138.20/soft/ActivePerl-5.8.0.806-MSWin32-x86.rar
2.下载 openssl-0.9.8m 解压到根目录下 。如c:
http://www.openssl.org/source/
开始安装:完全可以参照斑竹的文章或openssl目录下的install forw in32
1) > perl Configure VC-WIN32
: 如不成功会有明显提示
2) > ms\do_ms
3)转到C:\Program Files\Microsoft Visual Studio\VC98\bin目录(默认安装时)下
执行 vcvars32.bat 以配置环境变量。
4)跳到openssl目录下
执行> nmake -f ms\ntdll.mak
:如果编译成功,最后的输出都在out32dll目录下 : 包括可执行文件 、两个dll和两个lib文件。
:
最终编译出来的结果都存放在out32dll子目录下,常用的文件包括libeay32.lib,libeay32.dll,ssleay32.lib,ssleay32.dll以及openssl.exe。中间生成的obj文件都在tmp32dll子目录下,可以把它们删掉。
5.运行 nmake -f ms\ntdll.mak test。检查上一步安装编译是否成功。
然后在C:\openssl目录下建立bin, include, lib三个文件夹。bin目录下包括openssl.exe(), ssleay.dll(),libeay.dll(),lib目录下包括两个lib文件夹,即ssleay32.lib,libeay.lib,分别是ssleay.dll、libeay.dll动态链接库对应的lib文件。include目录包括了openssl开发设计的头文件。
必备条件:
1、安装VC++ 6.0。
2、需要perl的支持,下载ActivePerl并安装:http://downloads.activestate.com/ActivePerl/releases/5.10.1.1007/ActivePerl-5.10.1.1007-MSWin32-x86-291969.msi
3、下载 openssl0.98并解压,当然是必不可少的。
http://www.openssl.org/source/openssl-0.9.8.tar.gz
安装步骤:
1、运行cmd,切换到openssl目录,perl Configure VC-WIN32
如不成功会有明显提示
2、下面三个命令选一个就行了
ms\do_ms 推荐使用这种方式 另外两种方式 如果使用也必须保证本机有编译器才能使用。
:ms\do_masm (默认vc 自带的编译器;也也以自己下载安装,我用的这个,因为我用其他的没成)
:ms\do_nasm (需要自己下载)
3、vcvars32.bat 以配置环境变量。
4、nmake -f ms\ntdll.mak 如果编译成功,最后的输出都在out32dll目录下:包括可执行文件、两个dll和两个lib文件: libeay32.dll, libeay32.lib, ssleay32.dll, ssleay32.lib(我编译的时候出现了这个错误
'ml'
不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: 'ml' : return code '0x1'
Stop.
大家应该一看就知道问题所在,解决很容易,把VC下的ml.exe复制到当前目录即可)
编程初步:
1、 打开VC-Tools-Options-Directores,在Include files中增加【openssl-0.9.8】\inc32目录;在Libray files中增加【openssl-0.9.8】\out32dll
2、 在源程序中包含以下三个头文件并加入LIB:
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/bio.h>
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")
以上是最简单的安装方式,但是不能使用静态库,必须带着DLL文件才行,下面有另外一种安装方式:
将源码释放在c:\openssl-0.9.8g目录中。
进入openssl源码目录。
cd c:\openssl-0.9.8.g
以下为参照该目录下的文件INSTALL.W32的执行过程:
运行configure:
perl Configure VC-WIN32 --prefix=c:/openssl
创建Makefile文件:
ms\do_ms
编译动态库:
nmake -f ms\ntdll.mak
编译静态库:
nmake -f ms\nt.mak
清除上次动态库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\nt.mak clean
使用静态库,只需在Libray files中修改【openssl-0.9.8】\out32dll 为【openssl-0.9.8】\out32
我遇到的一个问题,到网上找到了答案,记录如下:
--------------------Configuration: b64 - Win32 Release--------------------
Compiling...
b64.c
Linking...
MSVCRT.lib(MSVCRT.dll) : error LNK2005: __isctype already defined in LIBCMT.lib(isctype.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fclose already defined in LIBCMT.lib(fclose.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: __errno already defined in LIBCMT.lib(dosmap.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fflush already defined in LIBCMT.lib(fflush.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _strncpy already defined in LIBCMT.lib(strncpy.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in LIBCMT.lib(strchr.obj)
LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library
Release/b64.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
b64.exe - 7 error(s), 1 warning(s)
从错误信息可以看出是msvcrt.lib和libcmt.lib库中重复定义了__isctype等符号。为什么会出现这样的问题呢?这就要从这两个库的作用说起了。
msvcrt.lib是VC中的Multithreaded DLL 版本的C运行时库,而libcmt.lib是Multithreaded的运行时库。在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文件用了Multithreaded
DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。
告警信息的意思我们明白之后,就要找造成这个问题的原因了。在项目设置中我们可以看到当前项目使用的是Multithreaded非DLL版本的运行时库,这说明项目中还有其他文件用到了不是这个版本的运行时库。很显然,就是openssl的静态库。查看openssl中ms下的nt.mak,我们可以发现静态库版本中openssl使用编译开关/MD进行编译的,也就是说openssl静态库是默认用的Multithreaded DLL 版本的C运行时库。
原因找到了。那么解决方法,很明显有两个。总之就是将两个项目的运行时库统一。
简单的方式就是将项目的动态库修改为使用Multithreaded DLL 版本的C运行时库即可。某些情况下你的项目可能不能改变当前的运行时库,你可以将openssl的nt.mak中的/MD开关修改为/MT然后重新编译openssl静态库就可以了。
转自http://appcer.blog.sohu.com/145486232.html
http://blog.csdn.net/yuanfeiyan/article/details/1585885
在编译OpenSSL前,需要正确安装Perl,因为在编译OpenSSL时需要使用到该程序。
下载最新版本的Perl:http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.zip。然后安装之。
下载最新版本的OpenSSL:http://www.openssl.org/source/openssl-0.9.8g.tar.gz
然后将源码释放的c:\openssl-0.9.8g目录中。
首先将VS2008的nmake的环境变量加入的cmd中:
在cmd中执行 *:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat
进入openssl源码目录。
cd c:\openssl-0.9.8.g
运行configure:
perl Configure VC-WIN32 --prefix=c:/openssl
创建Makefile文件:
ms\do_ms
编译动态库:
nmake -f ms\ntdll.mak
编译静态库:
nmake -f ms\nt.mak
测试动态库:
nmake -f ms\ntdll.mak test
测试静态库:
nmake -f ms\nt.mak test
安装动态库:
nmake -f ms\ntdll.mak install
安装静态库:
nmake -f ms\nt.mak install
清除上次动态库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\nt.mak clean
参考: http://blog.chinaunix.net/uid-20479991-id-216269.html
1. 准备:
1.1 安装perl环境, 下载地址: http://dlsw.baidu.com/sw-search-sp/soft/4a/14792/ActivePerl_5.16.2.3010812913.msi
1.2 下载nasm.exe和ndisasm.exe, 地址: http://dldx.csdn.net/fd.php?i=639621962335100&s=3ad4555faf530935e0d6fed04f37fd21
2. 编译
2.1 参考INSTALL.W64文件, To build for Win64/x64: (在dos下执行以下命令)---编译出错,未成功
cd E:\program\opensource\openssl-1.0.1h(openssl源码目录)
perl Configure VC-WIN64A
ms\do_win64a----这里有错误
nmake -f ms\ntdll.mak
cd out32dll
..\ms\test
2.2 参考INSTALL.W32文件, Visual C++:---编译成功,安装成功
perl Configure VC-WIN32 --prefix=D:\opensource\openssl//
prefix指定安装位置
ms\do_nasm// 使用汇编语言文件和NASM
nmake -f ms\ntdll.mak// 将会生成dll文件或可执行文件,在目录out32dll下
2.2.2: 如果想测试下,可以执行: nmake -f ms\ntdll.mak test
3: 安装
将OpenSSL安装到指定的路径: nmake -f ms\ntdll.mak install
注意:
因为要执行nmake命令,但是这个文件所在路径并没有注册到Path环境变量下,所以最好在"Visual Studio 2008命令提示"窗口中操作以上命令.
-------------------------------------------------------------------------
我的系统是win7 64位, 我本来想参考INSTALL.W64文件来编译的,但是中途出错了,出错的文件是ms\uptable.asm,有个"..imagebase"未定义,最终放弃。
最后参考INSTALL.W32文件,成功了!
1.下载
ActivePerl-5.8.0.806-MSWin32-x86 并安装
http://221.231.138.20/soft/ActivePerl-5.8.0.806-MSWin32-x86.rar2.下载 openssl-0.9.8m 解压到根目录下 。如c:
http://www.openssl.org/source/
开始安装:完全可以参照斑竹的文章或openssl目录下的install forw in32
1) > perl Configure VC-WIN32
: 如不成功会有明显提示
2) > ms\do_ms
3)转到C:\Program Files\Microsoft Visual Studio\VC98\bin目录(默认安装时)下
执行 vcvars32.bat 以配置环境变量。
4)跳到openssl目录下
执行> nmake -f ms\ntdll.mak
:如果编译成功,最后的输出都在out32dll目录下 : 包括可执行文件 、两个dll和两个lib文件。
:
最终编译出来的结果都存放在out32dll子目录下,常用的文件包括libeay32.lib,libeay32.dll,ssleay32.lib,ssleay32.dll以及openssl.exe。中间生成的obj文件都在tmp32dll子目录下,可以把它们删掉。
5.运行 nmake -f ms\ntdll.mak test。检查上一步安装编译是否成功。
然后在C:\openssl目录下建立bin, include, lib三个文件夹。bin目录下包括openssl.exe(), ssleay.dll(),libeay.dll(),lib目录下包括两个lib文件夹,即ssleay32.lib,libeay.lib,分别是ssleay.dll、libeay.dll动态链接库对应的lib文件。include目录包括了openssl开发设计的头文件。
必备条件:
1、安装VC++ 6.0。
2、需要perl的支持,下载ActivePerl并安装:http://downloads.activestate.com/ActivePerl/releases/5.10.1.1007/ActivePerl-5.10.1.1007-MSWin32-x86-291969.msi
3、下载 openssl0.98并解压,当然是必不可少的。
http://www.openssl.org/source/openssl-0.9.8.tar.gz
安装步骤:
1、运行cmd,切换到openssl目录,perl Configure VC-WIN32
如不成功会有明显提示
2、下面三个命令选一个就行了
ms\do_ms 推荐使用这种方式 另外两种方式 如果使用也必须保证本机有编译器才能使用。
:ms\do_masm (默认vc 自带的编译器;也也以自己下载安装,我用的这个,因为我用其他的没成)
:ms\do_nasm (需要自己下载)
3、vcvars32.bat 以配置环境变量。
4、nmake -f ms\ntdll.mak 如果编译成功,最后的输出都在out32dll目录下:包括可执行文件、两个dll和两个lib文件: libeay32.dll, libeay32.lib, ssleay32.dll, ssleay32.lib(我编译的时候出现了这个错误
'ml'
不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: 'ml' : return code '0x1'
Stop.
大家应该一看就知道问题所在,解决很容易,把VC下的ml.exe复制到当前目录即可)
编程初步:
1、 打开VC-Tools-Options-Directores,在Include files中增加【openssl-0.9.8】\inc32目录;在Libray files中增加【openssl-0.9.8】\out32dll
2、 在源程序中包含以下三个头文件并加入LIB:
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/bio.h>
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")
以上是最简单的安装方式,但是不能使用静态库,必须带着DLL文件才行,下面有另外一种安装方式:
将源码释放在c:\openssl-0.9.8g目录中。
进入openssl源码目录。
cd c:\openssl-0.9.8.g
以下为参照该目录下的文件INSTALL.W32的执行过程:
运行configure:
perl Configure VC-WIN32 --prefix=c:/openssl
创建Makefile文件:
ms\do_ms
编译动态库:
nmake -f ms\ntdll.mak
编译静态库:
nmake -f ms\nt.mak
清除上次动态库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\nt.mak clean
使用静态库,只需在Libray files中修改【openssl-0.9.8】\out32dll 为【openssl-0.9.8】\out32
我遇到的一个问题,到网上找到了答案,记录如下:
--------------------Configuration: b64 - Win32 Release--------------------
Compiling...
b64.c
Linking...
MSVCRT.lib(MSVCRT.dll) : error LNK2005: __isctype already defined in LIBCMT.lib(isctype.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fclose already defined in LIBCMT.lib(fclose.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: __errno already defined in LIBCMT.lib(dosmap.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fflush already defined in LIBCMT.lib(fflush.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _strncpy already defined in LIBCMT.lib(strncpy.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in LIBCMT.lib(strchr.obj)
LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library
Release/b64.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
b64.exe - 7 error(s), 1 warning(s)
从错误信息可以看出是msvcrt.lib和libcmt.lib库中重复定义了__isctype等符号。为什么会出现这样的问题呢?这就要从这两个库的作用说起了。
msvcrt.lib是VC中的Multithreaded DLL 版本的C运行时库,而libcmt.lib是Multithreaded的运行时库。在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文件用了Multithreaded
DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。
告警信息的意思我们明白之后,就要找造成这个问题的原因了。在项目设置中我们可以看到当前项目使用的是Multithreaded非DLL版本的运行时库,这说明项目中还有其他文件用到了不是这个版本的运行时库。很显然,就是openssl的静态库。查看openssl中ms下的nt.mak,我们可以发现静态库版本中openssl使用编译开关/MD进行编译的,也就是说openssl静态库是默认用的Multithreaded DLL 版本的C运行时库。
原因找到了。那么解决方法,很明显有两个。总之就是将两个项目的运行时库统一。
简单的方式就是将项目的动态库修改为使用Multithreaded DLL 版本的C运行时库即可。某些情况下你的项目可能不能改变当前的运行时库,你可以将openssl的nt.mak中的/MD开关修改为/MT然后重新编译openssl静态库就可以了。
转自http://appcer.blog.sohu.com/145486232.html
http://blog.csdn.net/yuanfeiyan/article/details/1585885
相关文章推荐
- linux 命令——61 wget(转)
- 关于 tomcat 集群中 session 共享的三种方法
- linux 命令——58 ss(转)
- nginx 负载均衡
- 邮件服务器(二)――centos6.5编译安装postfix-2.11.1
- centOS6 php 编 imap 模
- linux 命令——56 ss(转)
- linux: start a service
- apache 相关的一些东西
- 纯手工玩转 Nginx 日志
- linux 命令——56 netstat(转)
- 好网站收藏
- 巧妙使用Firebug插件,快速监控网站打开缓慢的原因
- linux svn+apache 配置客户自助修改密码
- Android底层架构研究
- linux 命令——55 traceroute(转)
- BZOJ1665 : [Usaco2006 Open]The Climbing Wall 攀岩
- centos6.5安装redmine2.6
- Bash中一些重要的命令
- linux新的API signalfd、timerfd、eventfd使用说明