[無法解析的外部符號] unresolved external symbol __imp__fprintf and __imp____iob_func


剛剛在VS2015上跑工程時遇到的可能無法解析外部符號的一類問題:“unresolved external symbol __imp__fprintf and __imp____iob_func”

出現這個問題的原因是因為 VS2015 的stdin,stdout,stderr這三個符號定義和原來版本不同,在VS2015版本
為:

#define stdin (__acrt_iob_func(0))
#define stdout (__acrt_iob_func(1))
#define stderr (__acrt_iob_func(2))

而之前為:

#define stdin (&__iob_func()[0])
#define stdout (&__iob_func()[1])
#define stderr (&__iob_func()[2])

解決辦法:
自行定義這三個符號

extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }

參考來源:stackoverflow

另在跑一些老工程時經常出現的找不到動態庫的問題,可以按照以下關系自行配置動態庫

vc8 = Visual Studio 2005
vc9 = Visual Studio 2008
vc10 = Visual Studio 2010
vc11 = Visual Studio 2012
vc12 = Visual Studio 2013
vc14 = Visual Studio 2015

MSVCP80.DLL is from Visual Studio 2005
MSVCP90.DLL is from Visual Studio 2008
MSVCP100.DLL is from Visual Studio 2010
MSVCP110.DLL is from Visual Studio 2012
MSVCP120.DLL is from Visual Studio 2013
MSVCP140.DLL is from Visual Studio 2015


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM