在VS2015中使用C++静态库时遇到的问题

最近升级了VS2015 Update1。准确地说,是卸载了VS2015然后重装了VS2015 Update1。我发现我试图“升级”VS从来没有成功过,每次都不得不先卸载再安装。真是无力吐槽。另外给准备安装或者升级VS的朋友提点建议:首先关掉各种杀毒软件和安全工具,然后用管理员权限启动安装程序。


在VS 2015中,如果使用第三方提供的静态库(.lib),可能会遇到链接错误:


错误 LNK2019 无法解析的外部符号 __imp__vsnprintf_s,该符号在函数 "public: static class ... 中被引用 Sample Sample\mdd.lib(UtString.obj)


错误 LNK2001 无法解析的外部符号 __imp__vsnprintf_s Simple ...\MSVCRTD.lib(vsnprintf_s.obj)


错误 LNK2001 无法解析的外部符号 __imp____iob_func Sample ...\mdd.lib(UtDebug.obj)


遇到这种问题,不要总以为是你自己的库没有正确引入。事实上这个问题对于使用之前版本VS编译的静态库来说恐怕会很常见。

MS给的解释在这里:

Breaking Changes in Visual C++ 2015


解决方法:对于自己的项目,可以引入legacy_stdio_definitions.lib这个静态库。但是对于第三方的静态库,这问题无解。只能请求提供方更新,或者用旧版平台工具编译出DLL。

添加评论

Loading