奇思妙想 · 2024年 4月 7日 0

VS2019的c代码不包含stdio.h就无法编译通过?

29 次浏览

有时,为了做一些测试,不希望包含系统头文件stdio.h, 只希望用extern引用printf声明。但在VS2019可能会遇到链接错误:"error LNK2019: 无法解析的外部符号 _printf,函数 _main 中引用了该符号".

  • 增加链接ucrt: #pragma comment(lib, "ucrt.lib")
    --> 无效!
  • #define _CRT_SECURE_NO_WARNINGS 1
    --> 无效!
  • 链接legacy_stdio_definitions.lib: #pragma comment(lib, "legacy_stdio_definitions.lib")
    --> PASS.

原因是VS2019将许多标准库采用内联方式处理,即不需要特别链接ucrt,所以需要特别指定使用legacy stdio lib来让链接器通过。