`
ideage
  • 浏览: 326044 次
社区版块
存档分类
最新评论

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版本

分享到:
评论

相关推荐

    openssl 1.0.2o经vc6.0编译过的源码和.dll

    总结来说,OpenSSL 1.0.2o 是一个经过 VC6.0 编译的版本,它提供了在老版本开发环境中构建安全连接的能力。通过学习和使用这个版本,开发者不仅可以掌握 SSL/TLS 协议的实现,还能了解如何在不同编译环境下管理库...

    windows下编译libMSN(VC6.0).zip

    总结,Windows下使用VC6.0编译libMSN涉及多个步骤,包括openssl的编译、MASM的安装和CMake的使用,以及可能遇到的问题和解决策略。这个过程既锻炼了开发者对编译工具和环境的理解,也对深入掌握libMSN的内部工作原理...

    vc6.0编译的rtmpdump.exe

    通过VC6.0编译的RTMPDump.exe是研究和调试RTMP协议的强大工具,尤其适用于那些需要深入了解协议细节或需要定制功能的开发者。虽然VC6.0相对较老,但其稳定性和兼容性使得它仍然是某些特定场景下的理想选择。了解如何...

    vc6.0 openssl

    在**VC6.0** 中配置OpenSSL,首先需要下载OpenSSL源代码并进行编译,生成适用于VC6.0的动态链接库(DLL)和静态链接库(LIB)。编译过程中需要设置正确的平台工具集,确保与VC6.0兼容。完成后,将库文件和头文件添加...

    VC6.0编程MD5算法三种实现方法

    总的来说,MD5算法在VC6.0中的实现涉及到对算法的理解、代码设计、库的使用和性能优化。理解每种实现方法的工作原理和适用场景,对于深入学习密码学和信息安全至关重要。而通过实际的编程和测试,可以更好地掌握这些...

    xSocks编译版vc6.0可用.rar

    总之,"xSocks编译版vc6.0可用.rar"提供了一种在较旧开发环境中使用xSocks的可能性,对于那些希望在不升级IDE的情况下利用SOCKS5代理功能的用户来说,这是一个非常有价值的资源。在使用过程中,开发者需要具备一定的...

    经典的MD5字符串加密VC 6.0源码.rar

    7. **编译与运行**:在VC 6.0环境中,开发者需要配置项目设置,选择合适的编译器选项,并链接必要的库(如Microsoft的CryptoAPI),然后才能编译和运行这个源码。 总的来说,这个源码示例对于理解MD5哈希函数在C++...

    curl-7.21.3 VC6.0 源码

    在Windows平台下,使用古老的VC6.0编译curl源码,需要先确保以下几点: 1. 安装Microsoft Visual Studio 6.0,包括VC++编译器和必要的库。 2. 安装Windows SDK,提供必要的头文件和库文件。 3. 下载并安装zlib和...

    基于 vc6.0 md5 加密

    5. **编译配置**:在VC6.0中,你需要确保配置正确的库链接和包含路径。在工程设置中添加OpenSSL库的路径到“Include Directories”和“Library Directories”,然后在“Input”选项卡下添加相应的.lib文件。 6. **`...

    vc6.0+perl5.8.8.2+openssl0.9.6i.zip

    标题中的"vc6.0+perl5.8.8.2+openssl0.9.6i.zip"指示了这个压缩包包含三个主要组件:Visual C++ 6.0(简称VC6.0)、Perl 5.8.8.2以及OpenSSL 0.9.6i。这些组件在IT领域中都有特定的用途和重要性。 首先,**Visual ...

    OpenSSL1.0.1e,VC6编译动态库和静态库

    在Windows环境中,使用Visual C++ 6.0(简称VC6)编译OpenSSL可以为开发者提供与旧版Windows操作系统兼容的库文件。VC6是一个历史悠久的C++编译器,广泛用于开发对性能有高要求的软件,尽管微软已不再支持,但它仍然...

    VC6.0编写文件加密(C语言)

    在VC6.0中编译和运行此程序,需要确保输入文件路径正确,并为输出文件指定一个不同的名称。如果要对非文本文件进行加密,可能需要处理二进制数据,使用更复杂的加密算法,比如AES,并且可能需要使用缓冲区读写文件。...

    DES 加密VC6.0下C++实现

    在这个"DES 加密VC6.0下C++实现"项目中,开发者使用了Microsoft Visual C++ 6.0作为集成开发环境(IDE)。VC6.0是一款古老的但功能强大的C++编译器,它支持Windows平台上的应用程序开发。程序实现了DES的加密和解密...

    用VC6.0实现的md5算法的代码

    需要注意的是,单片机可能没有足够的内存和处理能力来直接运行VC6.0的编译结果,因此可能需要将代码优化,减少依赖,甚至使用更底层的位操作来实现。同时,单片机可能需要特定的库支持或者自定义的内存管理机制。 ...

    AES.rar_aes vc 6.0

    标题"AES.rar_aes vc 6.0"指出这是一个与AES(高级加密标准)加密算法相关的项目,它在经典的Microsoft Visual C++ 6.0开发环境中得以实现并能正常运行。这个压缩包很可能是包含了用于VC++ 6.0的源代码文件,帮助...

    openssl 1.0.1k 移植到vc2013

    移植OpenSSL到新的编译器环境,例如从VC6.0迁移到VC2013,主要涉及到几个关键步骤: 1. **环境配置**:确保你已经安装了Visual Studio 2013,并且设置了开发环境。VC2013引入了许多新特性,比如C++11标准支持,这...

    openssl-vc6静态库

    在项目中使用OpenSSL静态库,需要将生成的.lib文件加入到项目的链接器输入中,并包含对应的头文件。这样,编译器会将静态库中的函数和数据直接嵌入到你的程序中。 **5. 功能与应用** OpenSSL静态库提供了丰富的...

    openssl windows

    使用VC6.0编译OpenSSL需要设置编译器环境,配置所有必要的依赖项。 3. **配置**:编译完成后,需要将OpenSSL的bin目录添加到系统的PATH环境变量中,以便命令行可以找到OpenSSL的可执行文件。 4. **使用**:现在可以...

    openssl 0.9.8 rsa vc工程 编译通过

    编译OpenSSL通常包括以下步骤: 1. 获取源代码:从OpenSSL官方网站下载0.9.8版本的源码包。 2. 配置环境:设置路径,确保VC6的编译器和其他必要的工具在PATH环境变量中。 3. 配置编译选项:使用`Configure`脚本,...

Global site tag (gtag.js) - Google Analytics