VS + QT 出現 LNK2001 無法解析的外部符號 QMetaObject 的問題


在一個QT項目中新建一個帶QObject定義的類后 (不是繼承),可能會出現LNK2001 的錯誤,這是由於IDE沒有自動為新建的類生成 moc_XXXX.cpp 文件導致的。

一種做法是手動生成moc_XXXX.cpp文件,然后復制到指定位置,如https://www.cnblogs.com/lovebay/p/9337528.html,但一旦文件有改動,就需要重新手動操作一遍。

另一種做法是通過配置,自動生成moc_XXXX.cpp文件,可參考https://jingyan.baidu.com/article/3065b3b68518adbecef8a477.html。步驟是

  1. 修改類的.h文件的配置屬性,在“項類型”或“ItemType”中選擇“自定義生成工具”或“Custom Build Tool”,點擊應用,左邊的屬性里會出現一個新的選項,如圖所示:
  2. 參考其它正確的.h文件配置該項即可

 若這一過程完全配置正確,編譯鏈接還是有問題的話,再參考https://blog.csdn.net/humanking7/article/details/80871729,因為剛才只是配置了.h文件,而項目還沒有正確編譯對應的cpp文件。步驟:

  1. 編輯項目的.vcxproj文件,參考其它的QT文件,我碰到的是缺少下面這個XML片段,注意:Debug和Release應各有一個該片段,只是其中下面高亮的路徑不一樣

    <ClCompile Include="GeneratedFiles\Debug\moc_XXXXX.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
    </ClCompile>

 


免責聲明!

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



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