天天看點

錯誤 LNK2019,無法解析的外部符号__imp____iob_func; 無法解析的外部符号 __imp__fprintf 的解決方法。

每次看到的LNK2019 的報錯就有種崩潰的感覺,尤其是剛接觸vc++的程式員。

我們經常會在網上搜尋大神的技術文檔,大神們提供的源代碼都表示沒有bug直接可以使用,但是我們下載下傳以後發現各種報錯,看到報錯一臉懵。心想,難道是大神的源代碼錯了麼?也有可能,不過一般情況下都是我們自己的問題,舉個例子,我們的vs版本和大神的vs版本是不同的,因為vs更新版本之後,所使用的基本庫會更新,這就導緻了很多問題,方法名更新之後對于我們這種小白來說就是運作不了了,這裡來說一下低版本更新高版本vs發生的兩種LNK2019的解決方法:

1.無法解析的外部符号__imp____iob_func

因為在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 */
           

這樣在新的版本中編譯就可以找到符号了,當然其他的過期方法也可以用這個方法去解決問題。

2.無法解析的外部符号 __imp__fprintf 

對于有些過期的方法。微軟自己出了一個庫檔案專門解決這個問題。解決方法如下:

錯誤 LNK2019,無法解析的外部符号__imp____iob_func; 無法解析的外部符号 __imp__fprintf 的解決方法。

在連接配接器的附加依賴項中添加“legacy_stdio_definitions.lib;”依賴即可解決。這是微軟對于版本功能過期的官方辦法,顯然,這種方法并不能解決所有問題。

以上就是兩種解決LNK2019錯誤的方法。如果有問題麻煩指正。