LNK4098 默认库“msvcrt.lib”与其他库的使用冲突, LNK2019 无法解析的外部符号 __imp__fprintf

最近向VS2017导入一个工程的时候,一下子报了4个LINK 错误:
一一来解决。

1. LNK4098 类型错误

LNK4098 默认库“msvcrt.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

LNK4098 默认库“MSVCRTD”与其他库的使用冲突;请使用/NODEFAULTLIB:library

解决办法: LNK4098 类型的错误是因为
一个可执行项目依赖多个lib项目的情况下,经常出现此类问题,原因在默认运行时库的引用上。一般情况下,我会首先打开各个项目的属性查看如下选项:项目–属性–配置属性–C/C+±-代码生成–运行时库(有/MT,/MTd,/Md,/MDd四个选项)。
在这里插入图片描述可以更改一下里面的设置,重新生成看是否报错,如果还报错,就挨个选一次,总会解决LNK4098类型错误。

2. LNK2019 类型错误

LNK2019 无法解析的外部符号 __imp__fprintf,该符号在函数 _ShowError 中被引用

LNK2019 无法解析的外部符号 __imp____iob_func,该符号在函数 _ShowError 中被引用

解决办法:
包含库的编译器版本低于当前编译版本,需要将包含库源码用vs2017重新编译,由于没有包含库的源码,此路不通。
然后查到说是stdin, stderr, stdout 这几个函数vs2015和以前的定义得不一样,所以报错。
解决方法呢,就是使用{*stdin,*stdout,*stderr}数组自己定义__iob_func()

加两行代码如下

#pragma comment(lib,"legacy_stdio_definitions.lib")
extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }

大功告成。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值