在VC 6.0中编译openssl-0.9.8l版本

2024-01-27 19:32
文章标签 编译 版本 6.0 0.9 vc openssl 8l

本文主要是介绍在VC 6.0中编译openssl-0.9.8l版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在VC 6.0中编译openssl-0.9.8l版本

最近在重新编译openssl最新版本的时候遇到一些问题,结合网上的介绍文档,自己整理了一下编译过程。

一、编译OpenSSL

1、安装Perl:
    下载最新版本的Perl,然后安装之。
    在编译OpenSSL前,需要正确安装Perl,因为在编译OpenSSL时需要使用到该程序。
 设置PATH参数:“D:/Perl/site/bin;D:/Perl/bin;”。确保可以运行编译脚本。

2、安装masm32:
 下载最新版本的masm32,并安装。
 设置PATH参数:“D:/masm32/bin;”。确保ml.exe、link.exe可用,不会出现不必要的编译错误。

3、下载OpenSSL:

    下载最新版本的OpenSSL:http://www.openssl.org/source/openssl-0.9.8l.tar.gz
   
4、设置VC6环境:
 VC编译环境设置:运行VCVARS32.BAT;

5、重启计算机:
 因为前面步骤设置了PATH参数,所以要重启机器,确保参数可用;

6、编译OpenSSL:

    将源码释放到D:/openssl-0.9.8l目录中。
 进入openssl源码目录。
    cd D:/openssl-0.9.8l
   
    以下为参照该目录下的文件INSTALL.W32的执行过程:

    运行configure:
    perl Configure VC-WIN32 --prefix=D:/openssl-0.9.8l

    创建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

7、编译可能遇到的问题:
 1、mc相关错误:VC编译环境未设置,运行VCVARS32.BAT,重启机器;
 2、ml相关错误:可能masm32未安装或者未设置PATH参数;
 3、link相关错误:可能masm32未安装或者未设置PATH参数;
 4、ActivePerl环境未设置:修改Path参数,重启机器;
 5、动态库、静态库要分开编译,否则会出错;
 6、编译出错之后,如果要重新开始编译,请把openssl目录全部删除,再重新解压缩新文件到目录,确保编译环境正确;

二、使用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版本

这篇关于在VC 6.0中编译openssl-0.9.8l版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651256

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件