VS2010到VS2017工程常见的兼容性问题

1.error LNK2001 无法解析的外部符号 _vsnprintf VS2017
  解决方法:在vs2015工程选项,链接器附加依赖项里面添加legacy_stdio_definitions.lib即可。
  原因:出现这个问题的原因是vs2015默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,
       所以要专门添加标准库文件来链接标准库中的函数。
       
2.error LNK2019: 无法解析的外部符号 __iob_func
  解决方法:添加如下代码.cpp
  /*
   * 当libjpeg-turbo为vs2010编译时,vs2015下静态链接libjpeg-turbo会链接出错:找不到__iob_func,
   * 增加__iob_func到__acrt_iob_func的转换函数解决此问题,
   * 当libjpeg-turbo用vs2015编译时,不需要此补丁文件
   */
  #if _MSC_VER>=1900
  #include "stdio.h" 
  _ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned); 
  #ifdef __cplusplus 
  extern "C" 
  #endif 
  FILE* __cdecl __iob_func(unsigned i) { 
      return __acrt_iob_func(i); 
  }
  #endif /* _MSC_VER>=1900 */
  
  3.error LNK2026    模块对于 SAFESEH 映像是不安全的。
    解决方法:
    a.打开该项目的“属性页”对话框。
    b.单击“链接器”文件夹。
    c.单击“命令行”属性页。
    d.将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。
 


版权声明:本文为dangwei_90原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。