2016-09-23 72 views
0

處理由別人編寫的相當大的代碼塊,我對QT並不是很熟悉,但是我最近的調試沒有成功。QT構建QWidget,QObject錯誤

偉大的工作後,我加了3行,接着評論逐一測試,並在測試時得到了這兩種錯誤的更多的變化:

undefined reference to 'QObject::connectNotify(char const*)' (.rodata._ZTV15NumberWithUnits[_ZTV15NumberWithUnits]+0x60) undefined reference to 'QWidget::x11Event(_XEvent*) (.rodata._ZTV15NumberWithUnits[_ZTV15NumberWithUnits]+0x160)

我想可能有一些庫或其他構建錯誤,或者我需要做的文件清理,但是我被卡住了。

在搜索並嘗試了多個事物之後,我發現了幾個類似的答案,如this one,並試圖實現添加-lqt語句或修復qmake。

有關如何執行此操作或嘗試其他操作的建議?

+1

刪除生成文件夾和重建項目... –

+0

哇,簡單的修復工作。我有其他錯誤,我認爲此刻不相關。這在QT環境中經常發生嗎?任何想法爲什麼/何時我可能會看到? – dusev

+0

這是因爲makefile - qmake的輸出 - 取決於qmake掃描輸入的所有文件,但如果qmake每次更改它們時都必須重新讀取它們,它會減慢構建的速度。所以它不這樣做。這可以通過重新構建qmake來解決,但是考慮到qmake作爲一種工具已經到了生命的盡頭,這樣做幾乎沒有什麼動機。如果你想避免這個問題,可以使用'qbs'(Qt build system)或'cmake'來代替。 –

回答

1

Qt依賴於幾種不同類型的生成文件,並且如果您的構建系統(無論它是什麼)不知道這些依賴關係,並且不知道在進行更改時重新生成文件,那麼您會因這些生成的文件過期而導致大量令人困惑的錯誤消息。

在這種特殊情況下,最有可能的是「MOC」(元對象編譯器)文件過期。這些文件是從包含Q_OBJECT宏的包含文件生成的,它是創建它們的「moc」實用程序。

其他情況包括:

  • UI頭,其從所述的.ui(Qt設計)文件使用 「UIC」 實用
  • 資源文件(的.cpp)產生的,這是從所生成的.qrc文件使用「rcc」實用程序。

理想情況下,你的編譯系統將有依賴性,指出生成的MOC文件是依賴於包含Q_OBJECT宏匹配的.h文件中,然後構建系統將運行「交通部」重新生成文件。如果你的構建系統沒有這樣做,那麼你會受到很多挫折。

+0

感謝您的回答。我仍然不知道如何設置這一切。我無法再運行qmake,並在刪除它並重建和運行qmake後,獲得了使用所有.o文件生成的BIN文件。我在我的.pro文件中有OBJECTS_DIR = ./BIN/和MOC_DIR = ./BIN/,我無法弄清楚如何擺脫數百個對'QChar :: QChar(char)'的未定義引用..等等。錯誤。 我認爲這是由於這個構建錯誤,但由於某種原因,它不再適用於我。我的命令行嘗試也沒有結果。思考? – dusev