创建dll时applink.c相关问题:调用OpenSSL编译的dll报no OPENSSL_Applink错误如何解决
问题解决方案:.NET调用封装OpenSSL的C/C++ DLL时报no OPENSSL_Applink错误
该报错是MSVC编译的OpenSSL特有问题,默认启用的Uplink机制要求调用方模块包含applink.c实现完成CRT交互,你无需在.NET项目中引入该文件,只需调整C/C++封装层或OpenSSL的编译配置即可解决,可行方案按实现成本从低到高排序如下:
- 方案1:将
applink.c添加到你自己开发的C/C++封装DLL的源码中,和其他源码一起编译即可。该文件位于OpenSSL源码的ms/applink.c路径,引入后无需修改.NET端任何代码即可解决问题。 - 方案2:重新编译OpenSSL时禁用Uplink特性。执行Configure命令时添加
no-uplink参数,编译出的OpenSSL库将不再依赖Applink机制,编译时注意保持和封装DLL的CRT选项(/MD/MDd/MT/MTd)、目标架构完全一致。 - 方案3:将OpenSSL静态链接到你的封装DLL中。编译封装DLL时选择链接OpenSSL的静态库版本,同时将封装DLL的CRT运行时设置为静态编译(对应选项为/MT(发布版)/MTd(调试版)),所有OpenSSL逻辑会被打包到你的DLL内部,不会触发跨模块的Applink检查。
- 方案4:替换为MinGW编译的OpenSSL版本。MinGW编译的OpenSSL没有Uplink相关逻辑,直接替换后重新链接你的封装DLL即可解决。
注意事项:所有相关组件(封装DLL、OpenSSL库)的目标架构必须和.NET项目的目标架构完全匹配,禁止x86和x64混用。
内容的提问来源于stack exchange,提问作者Razvan Marian
相关产品推荐
相关产品推荐

