Visual Studio 2015和2012具有不兼容的C运行时库。如果我尝试将2015年构建的应用程序与使用2012年构建的链接库进行链接,则会出现链接器错误。
但是,我可以将2015和2012应用程序都链接到系统库,例如OpenGL32.dll。他们如何实现这一目标?
仅仅是静态链接到CRT(例如/ MT而不是/ MD)的问题吗?当我尝试时,仍然会出现链接错误。
如果您所指的错误是c ++使用的未修饰修饰名的未定义引用,则它对其他库起作用的原因是它们仅导出C接口。即使在系统库导出多态对象的地方(例如在COM中),它们也可以通过C语言接口来导出。是的,如果其他库没有抱怨自己的未定义引用,则它们已静态链接到运行时。
此外,MSVC还具有目标文件和链接器扩展名,可防止依赖于C ++运行时的链接目标文件与库的其他版本一起使用。即使从源代码构建代码,然后针对新的运行时进行链接,代码也可以正常工作。如果从源代码重建对象,则很容易以不兼容的方式更改对象,有时甚至不更改代码也是如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句