当前位置:   article > 正文

windows 使用VS2017编译 Openssl3.x.x 以及 poco1.12.4_widows下编译poco

widows下编译poco

1.下载源码以及相关编译工具

安装完成后还需要将它的位置加入PATH中(可能需要重启才会生效),以下为示例:

C:\Strawberry\c\bin

C:\Strawberry\perl\site\bin

C:\Strawberry\perl\bin

C:\Program Files (x86)\NASM

C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\bin       ----》vs自带 nmake路径

2. 运行VS2017 自带工具 Developer Command Prompt VS 2017

  • cd到 openssl源码所在的路径  如:cd /d D:\openssl-3.0.7\openssl-3.0.7

3. 调用perl 执行如下命令生成makefile文件

perl Configure VC-WIN32 no-asm --prefix=“D:\openssl-3.0.7OutPut”

  • VC-WIN32 表示编译32位
  • VC-WIN64A 表示编译64位
  • no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的。
  • shared :生成动态连接库(默认编译的是MD版本的库)
  • no-shared:编译静态库
  • –prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录

4. 调用nmake执行上一步生成的makefile

(注意可能需要提前设置vs2017 nmake的环境变量路径)

(nmake test这一步可以省略,测试脚本运行非常耗时)

  • nmake
  • nmake test
  • nmake install
  • nmake clean (执行清除, 目的是删除之前编译生成的文件,这样就可以重新编译下一个平台)

5. 生成文件(文件夹)结构示例如下

bin

html

include

lib

6.编译过程中可能遇到的错误

a. Crypto、NetSSL_OpenSSL模块编译时提示找不到openssl相关头文件

--->解决办法:找到该工程,在项目属性中添加openssl的头文件所在的目录

b.Crypto、NetSSL_OpenSSL模块编译时提示如下错误

1>libcrypto.lib(libcrypto-lib-e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp__CertOpenStore@20,该符号在函数 _capi_open_store 中被引用
1>libcrypto.lib(libcrypto-lib-e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp__CertCloseStore@8,该符号在函数 _capi_find_key 中被引用
1>libcrypto.lib(libcrypto-lib-e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp__CertEnumCertificatesInStore@8,该符号在函数 _capi_find_cert 中被引用
1>libcrypto.lib(libcrypto-lib-e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp__CertFindCertificateInStore@24,该符号在函数 _capi_find_cert 中被引用
1>libcrypto.lib(libcrypto-lib-e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp__CertDuplicateCertificateContext@4,该符号在函数 _capi_load_ssl_client_cert 中被引用
1>libcrypto.lib(libcrypto-lib-e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp__CertFreeCertificateContext@4,该符号在函数 _capi_dsa_free 中被引用
1>libcrypto.lib(libcrypto-lib-e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp__CertGetCertificateContextProperty@16,该符号在函数 _capi_cert_get_fname 中被引用

---> 解决方式:连接器->输入->附加依赖项增加 Crypt32.lib

7. 生成PDB文件

需要在项目属性中作如下设置
a.项目->属性->C/C++->常规->调试信息格式->程序数据库 (/ZI)
b.项目->属性->C/C++->优化->优化->已禁用(/Od)
c.项目->属性->链接器->调试->生成调试信息->优化以便于调试(/DEBUG)   

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/198119
推荐阅读
相关标签
  

闽ICP备14008679号