每次看到的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
對于有些過期的方法。微軟自己出了一個庫檔案專門解決這個問題。解決方法如下:
在連接配接器的附加依賴項中添加“legacy_stdio_definitions.lib;”依賴即可解決。這是微軟對于版本功能過期的官方辦法,顯然,這種方法并不能解決所有問題。
以上就是兩種解決LNK2019錯誤的方法。如果有問題麻煩指正。