openssl的问题

studentinfoa 2008-04-07 10:04:15
公司需要用到openssl,但是只有vs05这个工具,怎么用vs05编译openssl工程,各位谁会阿,求助,哭死了
...全文
510 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhou1xp 2012-04-14
  • 打赏
  • 举报
回复
顶一下
studentinfoa 2008-04-07
  • 打赏
  • 举报
回复
5l的朋友,d:\some\openssl\dir
这个dir文件夹并不存在阿,怎么回事呢?
ryfdizuo 2008-04-07
  • 打赏
  • 举报
回复
up
world007 2008-04-07
  • 打赏
  • 举报
回复
这里是vs2003的,但是2005应该也差不多吧,你看看
1。前期准备
1)下载ActivePerlWin32版本
下载地址:http://www.activestate.com/ActivePerl
我下载的不是安装包,是压缩包,在ActivePerl里叫AS package,版本是:ActivePerl 5.8.8.819。
下载后,解压到D:\ActivePerl,备用。
2)下载OpenSSL
下载地址:http://www.openssl.org/
我下载的版本为:openssl-0.9.8d
下载后,解压到D:\OpenSSL,备用。
3)下载微软的汇编编译器MASM
下载地址:我是在80x86汇编小站上去下载的。注意不要下载到MASM32的去了。地址是:
http://www.x86asm.com/DisplayArticle.asp?BoardID=8&ArticleID=63
版本是:6.11
下载后解压到D:\masm,备用。
4)要求要安装有VC++的编译器,我安装的是2003版本的。
2。开始编译
1)从开始-->Microsoft Visual Studio .NET 2003-->Visual Studio .NET 工具-->Visual Studio .NET 2003 命令提示进入命令行,因为从这里进去后,和C++相关的环境变量都已经设置好了。
2)设置环境变量
1.设置ActivePerl的环境变量
在命令行窗口执行:
>set path=%path%;D:\ActivePerl\perl\bin
这里的D:\ActivePerl\perl\bin要和你实际的安装位置对应,下同。
2.设置MASM的环境变量
在命令行窗口中执行:
>set path=%path%;D:\masm\bin
3)生成
1.转到OpenSSL的目录下面去,初始化一下,可能像:
>cd D:\OpenSSL
>perl Configure VC-WIN32 --prefix=d:\some\openssl\dir
这里的d:\some\openssl\dir是在安装的时候要用到的,现在我们不讲安装,但还是要执行这一步。不然最后一步的编译有问题。
2.生成汇编
>ms\do_masm
3.生成DLL
>nmake -f ms\ntdll.mak
在经历了漫长的编译过程后。
如果成功的话,你就会在OpenSSL的out32dll下看到一些dll和exe文件了。
好运。
Supper_Jerry 2008-04-07
  • 打赏
  • 举报
回复
编译器使用VC++6.0,根据它的说明,我进行了如下的命令和操作:
1.安装ActivePerl-5.6.1.629-MSWin32-x86-multi-thread.顺利通过!
2.打开控制台程序,在openssl解压后的目录下执行Perl Configure VC-WIN32命令,注意,一定要在这个目录下执行该命令,否则找不到Configure文件,当然,你也可以指定完整的Configure文件路径。顺利通过。
3.根据openssl的帮助说明,在解压目录下执行ms\do_masm(和ms_\do_ms)命令,成功通过。
4.配置VC环境变量,我在相同的控制台程序下转到VC所在目录下的vc98\bin目录,执行vcvars32批处理命令,设置VC的环境变量,然后再转到openssl解压包的根目录下。
注意:我第一次运行Vcvars32的时候,报错,错误为:Out of environment space,这个错误的产生是因为你的MS-DOS环境变量没有分配足够的内存,这可以通过如下方法解决:
a.点击开始, 点击运行.
b.输入sysedit后回车运行该程序.
c.然后会出现多个窗口,选择Config.sys窗口.
d.如果存在Shell= 的语句, 在其前面输入 REM ,即注释该语句.
e.如果该语句不存在,就直接输入SHELL=C:\COMMAND.COM /E:4096 /P ,注意,要保证该语句是从第一行第一个位置开始输入的。
f.保存、退出重新启动电脑就应该可以解决这个问题。
按上述方法解决这个问题之后,重新启动电脑后可以直接执行第4步。
5.在openssl解压目录下执行nmake -f ms\ntdll.mak,如果没有错误,就完成编译了。输出的文件在out32dll里面,包括应用程序的可执行文件、两个Lib文件和两个dll文件。

我根据openssl的说明,做了两种不通的编译,一直是加了ASM汇编语言编译器,一直是没有,即在第三步的时候执行do_masm或do_ms命令,时间上前者大概为3分钟(我的电脑配置是图拉丁塞杨1.2,内存256SDRM),后者大概是6分钟的样子。
然后,我使用了第三方提供的一个编译方法,该方法自动配置了openssl各个模块的V虚拟C工程连接配置项目,然后再进行编译,速度很慢,用了至少20分钟以上的时间,但是好处是可以将一个一个项目弄的比较清楚,其编译过程我就不说了,大家可以参看相关的文档。
Supper_Jerry 2008-04-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20020614/09/802476.html
星羽 2008-04-07
  • 打赏
  • 举报
回复
在VC中编译和使用OpenSSL
本文介绍在VC 6.0中编译和使用OpenSSL的过程。

一、编译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目录中。

进入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 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

二、使用OpenSSL

在VC中配置使用以上的函数库:
点击菜单:Tools -> Options,弹出对话框"Options",在该对话框中选择"Directories"标签。
在"Show directories for:"的"Include files"选项中新增目录"C:\openssl\include";"Library files"选择中新增目录"C:\openssl\lib"。
然后在需要链接OpenSSL函数库的工程中编译时加入"libeay32.lib"就可以了。

三、问题

我在链接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版本



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2048487

studentinfoa 2008-04-07
  • 打赏
  • 举报
回复
各位给个帮助吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧