无法解析的外部符号 __imp___vsnprintf 及__iob_func


无法解析的外部符号 imp_vsnprintf 及__iob_func

最近在拾取老项目进行整理打包,由于环境都升级到更高,所以编译出现 无法解析的外部符号 imp_vsnprintf 及__iob_func

  1. 无法解析的外部符号 imp_vsnprintf

属性 > 链接器 > 输入 > 附加依赖项 > 添加 legacy_stdio_definitions.lib

原因是vs默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数。

  1. 无法解析的外部符号 __iob_func

原因是VS上使用了VC6编译的DLL,其实iob_func和iob都是用来定义stdin,stdout,stderr

原来在VS中iob_func改成了acrt_iob_func,在自己的代码(报错的代码里)中增加了一个名为__iob_func转换函数:

1
2
3
4
5
6
7
8
9
10
#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 */