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/