解決 VC2005 項目遷移到 VS2022 過程中遇到的疑難 LNK Error
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】Visual Studio
問題描述
參考內容
其他問題
[
48 瀏覽
0 評論
17 贊
14 踩
]
概要
error LNK2001: 无法解析的外部符号 __imp___fmode
正文
問題描述
在將 VC2005 項目遷移到 VS2022 過程中遇到很多 LNK err,大多數通過搜索引擎解決了,不再贅述。唯獨
error LNK2001: 无法解析的外部符号 __imp___fmode
無法解決,網上也沒有資料。
解決方案
在 StdAfx.cpp 中寫入:
#undef _fmode extern "C" { FILE _fmode = { *__p__fmode }; }
即可。
註:此處 _fmode 的類型使用了 FILE,不確定是否正確,但是可以編譯通過。
參考內容
這個解決方案其實是根據
error LNK2001: 无法解析的外部符号 __imp____iob
的解決方案改造的。
這個問題的解決方案集合自兩篇文章:
文章一:解決 __iob 無法解析:https://blog.csdn.net/b695886658/article/details/79258872
文章二:解決 __iob_func 無法解析: https://blog.csdn.net/wquasdf/article/details/114013608
文章一的解決方案是這樣,在 StdAfx.cpp 中寫入:
extern "C" { FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]}; }
然而 __iob_func 本身也有問題,第二篇文章說需要這樣解決:
extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }
因此結合一下,最後寫作:
extern "C" { FILE _iob[3] = { *stdin,*stdout,*stderr }; }
即可解決 __iob 問題。
據此依葫蘆畫瓢,得出 _fmode 問題的解決方案。
其他問題
_imp_XXXX 無法解析的問題通常是由於鏈接時缺少了某個 lib,找到相應的 lib 加入項目的 lib 列表即可。(參考 https://blog.csdn.net/HideInTime/article/details/103181629)
據此解決了 __imp__sprintf 的報錯。(參考 https://blog.csdn.net/yulijuanxmu/article/details/87920714)