匯東網


解決 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




[ 17] [ 14]


 評論區  0 條評論

+ 添加評論