在视觉C++ malloc 警告中静态链接 openssl
Statically link openssl in Visual C++ malloc warning
OpenSSL 1.0.2g 软件包的 INSTALL.W32 文档具有以下警告文本:
关于编译链接到OpenSSL库的应用程序的最后一点评论。 如果不使用多线程 DLL 运行时库(/MD 选项),则 程序几乎肯定会崩溃,因为 Malloc 感到困惑—— OpenSSL DLL 静态链接到一个版本,应用程序必须 不要使用其他的。
我不完全理解这一点或它的影响。他们是说不支持静态链接 libeay32mt.lib 吗?
我们在应用程序中遇到随机崩溃,堆栈跟踪有时指向 openssl 函数中的免费调用,这是否是此警告所指的预期症状?
C
和C++内存管理在 CRT(C 运行时库)中实现。映射到进程(静态编译为模块或引用的 DLL)的 CRT 的每个物理副本都使用不同的堆。内存分配和解除分配必须在同一堆(即同一物理 CRT 副本)上执行(有关详细信息,请参阅跨 DLL 边界传递 CRT 对象的潜在错误)。
在特定方案中,需要确保执行以下操作:
- 将应用程序与 OpenSSL DLL 动态链接。
- 将应用程序与 CRT 动态链接。
- 验证应用程序和 OpenSSL DLL 是否链接到相同版本的 CRT(版本和配置)。
虽然可以静态链接到 OpenSSL,但如果您可以确保最终二进制文件包含单个 CRT 实现,并且不会(直接或间接)动态链接到 CRT。这很难维护,并且一旦链接到不提供静态库的库就会中断。
相关文章:
- 基于boost的程序的静态链接——zlib问题
- 使用gcc从静态链接的文件中查找可选符号
- 使用转换器提升 Python 问题 - 静态链接
- C++实用程序::转换在静态链接库中不起作用
- 将源中的 GLEW 与 cmake 静态链接
- 在发布模式下启动使用库的静态链接编译的应用程序时出错
- libavdevice 和 x11 的静态链接库应该以什么顺序链接?
- 静态链接启用 PIC 的库时出现链接器 PIC 错误
- 静态链接库时,收到链接器错误:找不到 -lgcc_s
- 静态链接 glibc & boost_python36 for Python extension
- 我可以在C++中配置静态链接吗?
- 协议缓冲区的静态链接会导致与现有符号冲突
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 静态链接 Visual Studio dll 到动态链接的 sfml 项目
- 我可以加载与库静态链接的 dll 吗?
- 静态链接MSVC库,动态链接Qt
- C++:找不到静态链接
- OpenSSL AES仅适用于某些计算机,即使具有静态链接也是如此
- CURL 静态链接未解析的外部符号
- 如何强制Windows.h在Visual Studio中静态链接而不是动态链接?