c++ - 系统 DLL 如何与不兼容版本的 Visual Studio 一起使用?

标签 c++ windows visual-studio

Visual Studio 2015 和 2012 具有不兼容的 C 运行时库。如果我尝试将 2015 年构建的应用程序与我使用 2012 年构建的链接库链接起来,那么我将遇到链接器错误。

但是,我可以将 2015 和 2012 应用程序链接到系统库,例如 OpenGL32.dll。他们是如何做到这一点的?

是否只是静态链接到 CRT 的问题(例如/MT 而不是/MD)?当我尝试时,我仍然遇到链接错误。

最佳答案

如果您提到的错误是对 c++ 使用的修饰名称的 undefined reference ,那么它适用于其他库的原因是它们仅导出 C 接口(interface)。即使系统库导出多态对象(例如在 COM 中),它们也是通过 C 语言接口(interface)进行的。是的,如果那些其他库不提示它们自己的 undefined reference ,那么它们已经静态链接到运行时。

MSVC 还具有目标文件和链接器扩展,可防止依赖于 C++ 运行时的链接目标文件与不同版本的库一起使用。即使代码从源代码构建然后链接到新的运行时也能正常工作,但还是会这样做。如果从源代码重建,对象很容易以不兼容的方式更改,有时甚至没有对代码进行任何更改。

关于c++ - 系统 DLL 如何与不兼容版本的 Visual Studio 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47859807/

相关文章:

c++ - 奇怪的资源处理 Visual Studio 2008

c# - 在 C# 中制作 Vista 风格的应用程序

c++ - clang 重写器 : add structure definitions to invalid program

c++ - OpenCV 网格区域

c++ - boolean 技巧的比较运算符

windows - 如何移动鼠标光标并单击?

python - 为什么 Nose 测试会在 Windows 8 上留下孤立的 PhantomJS 进程?

visual-studio - Visual Studio 2019 打开解决方案文件不兼容

c++ - 到 std::function<R(ARGS...)> 的可变参数模板转换适用于 GCC 而不是 MSVC2013,为什么?

windows - PUSHD 命令后批处理文件 ECHO 不起作用