最近在做Qt-vs項目時遇到這個問題,最初以為是比較經典的庫引用問題,在反複的查找工程配置信息時,并沒有發現什麼特别的問題。在網上找了半天,也沒有發現特别對症的方法,所以總結一下這個工程奇怪的現象。
環境:VS2017、Qt5.12.4、QtVSTool2.4.2
問題現象:
第一次編譯,出現問題,如果第二次不選擇重新生成,而是選擇生成,則系統可以正确編譯。當再次選擇重新生成時,重複出現如下問題。
1>MusicTimer.vcxproj -> E:\Work\MusicTimer\x64\Debug\MusicTimer.EXE
1>LINK : error LNK2001: 無法解析的外部符号 WinMainCRTStartup
1>E:\Work\MusicTimer\x64\Debug\\MusicTimer.exe : fatal error LNK1120: 1 個無法解析的外部命令
1>已完成生成項目“MusicTimer.vcxproj”的操作 - 失敗。
========== 全部重新生成: 成功 0 個,失敗 1 個,跳過 0 個 ==========
問題總結為:編譯器找不到入口函數,工程編譯失敗。
最開始以為是Qt的插件問題,因為該版本的Qt VS Tool 生成的工程是這種類型的,對這塊分析的比較少
在預處理定義的時候,使用的是“$(Qt_DEFINES_);%(PreprocessorDefinitions)”這個東西,并不是以前熟悉的“UNICODE _UNICODE WIN32 _ENABLE_EXTENDED_ALIGNED_STORAGE WIN64”這種定義。
所以問題不是太好找。
後來就使用了最笨的一種方法:逐步排除(将工程裡的源文件,逐步移除掉)。
首先,新建一個簡單的Qt程序,發現改程序可以正常的編譯執行。說明編譯環境和操作系統環境變量沒有問題。
然後,将工程裡的其他源文件全部移除,隻剩下Qt的main.cpp(如開頭的問題現象圖片)。
發現編譯仍然出現問題。于是,繼續移除問文件,将MusicTimer.rc資源文件移除。重新編譯
問題沒有了。反複重新生成,都沒有問題。但是新的問題是,軟件還需要圖标(生成的EXE沒有自定義圖标),沒有rc文件怎麼行。直接使用Qt的setWindowIcon()還實現不了這個功能。
資源文件内容如下,很簡單的内容。
經過反複的添加和移除MusicTimer.rc文件,問題和上述一樣。
在反複調試,運行過程中發現一個新的錯誤問題
目前猜測和這個有很大關系,但還不敢确定。後續再找時間繼續查找解決方法。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!