我可以将不同的Visual C++运行时与静态库混合使用吗
Can I mix different Visual C++ runtimes with a static library?
关于此堆栈;溢出问题:在一个进程中混合和匹配Visual C++运行时DLL文件有多糟糕
我知道在运行时使用不同版本的MSVCR可能会导致堆损坏。
但让我们想象一下以下情况是不起作用的:
libA
是一个与MSVCR71
链接的共享库Exe
是我的程序,它链接到libA
和MSVCR100
然后我有以下依赖方案:
Exe +--> libA ---> MSVCR71
+--> MSVCR100
那就是,我知道我不应该做的事
但是,如果现在,我使用任何使用MSVCR71
的Visual Studio将libA
编译为静态库,然后使用使用MSCVR100
的Visual Studio编译我的程序Exe
和libA
,会怎么样。
然后我会有以下方案:
Exe(lib A included) ---> MSVCR100
程序(包括静态库)是否可以很好地与MSVC100
链接而没有任何问题?或者,由于STL的标头容易在MSVCR71
和MSVC100
之间发生变化,我是否可以预期未定义的行为?
我终于在MSDN上找到了答案。。。
我引用(Visual C++2003-2015年的更改历史):
为了避免难以检测和诊断的运行时错误,我们建议您永远不要静态链接到通过使用不同版本的编译器进行编译。此外,当你升级EXE或DLL项目,请确保升级它链接到。如果您使用CRT(C运行时)或STL(标准模板库)类型,不要在二进制文件(包括DLL)之间传递它们是通过使用不同版本的编译器编译的。
因此,最好使用相同的编译器重新编译所有内容。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 混合调试和发布库:Windows vs Linux,静态与共享
- 混合双重调度和静态多态性
- 混合共享/静态库时静态成员的多个副本
- 混合静态库和共享库时的链接器依赖关系
- 错误:"混合的隐式和静态模式规则"在我的生成文件中
- 在编译期间混合 x86 和 x64 静态库C++
- 我可以将不同的Visual C++运行时与静态库混合使用吗
- 带有静态库(swift, objc, c++)的混合macOs应用链接错误
- 如何将使用boost::asio的本地c++静态库导入CLI/ c++混合模式应用程序?
- 在void*和void*之间进行强制转换时,混合使用静态强制转换和重新解释强制转换是否不安全?
- 为什么我无法使用 gcc 链接具有 C 接口的混合 C/C++ 静态库?
- 在静态库中混合 C 和 C++ 代码