2009-09-28 105 views
7

雖然建設QtCreator幾個不同的項目,我已經跨越了下面的生成錯誤運行:QtCreator建立回報collect2:LD返回退出狀態1

collect2: ld returned 1 exit status 

只是改變了一些東西(不應該改變什麼顯著後在構建中),如果它已經出現就會消失,否則如果它不存在就會出現。

在我目前的學校項目計劃中,我正在編譯rock03.cpp。它是構建中唯一的文件,並具有main()方法。我剛剛運行成功,回去改變一些if() S的順序,現在,我只得到兩個相關的警告:

overriding commands for target 'rock03.o' 

ignoring old commands for target 'rock03.o' 

與討論中的錯誤一起。

有誰知道爲什麼會發生這種情況?我似乎無法用任何合理的確定性重現錯誤,QtCreator在構建之前並沒有抱怨任何事情。

感謝

+1

'collect2:ld返回1退出狀態'不是錯誤信息本身。這只是一個鏈接器失敗的提示。你能發佈以前的錯誤輸出行嗎? –

+0

沒有其他的錯誤行。這裏的所有都是它的。 –

+4

如果你點擊「編譯輸出」按鈕,你應該得到鏈接器輸出,它不會出現在qt創建器的正常編譯錯誤輸出中。 –

回答

-1

檢查「編譯輸出」窗格中顯示,.pro文件試圖在同一.cpp文件兩次鏈接。

5

如果只有消息的錯誤是這涉及一個連接,其原因可能是你的程序仍在運行和連接器不能訪問的二進制文件。如果仍在運行,請確保您的應用程序已停止或將其取消。 Qtcreator在編譯之前從不檢查上一次運行是否已停止。

2

編譯器的輸出是真正有用的,如果你剛開始這是一個錯誤的時候,但第一個候選人是可能是你仍然有輸出程序打開,無法寫入文件,因爲這「我給你一個孤collect2錯誤這樣

2

此錯誤的原因與連鎖問題,比如,你忘了使用申報從頭文件中的一些靜態變量,也可能發生‘的extern’指令。

0

可能有更多的錯誤原因。但對於我來說,從課堂上消除未使用的SLOTS,問題就解決了。

1

當您不關閉主應用程序時發生這種情況(所以輸出可執行文件仍在運行,但沒有任何可見窗口)。舉個例子:當你關閉主窗口

int main() { 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 
    return a.exec(); 
} 

這個程序結束精細,但是這個代碼

int main() { 
    QApplication a(argc, argv); 
    QDialog w; 
    w.exec(); 
    return a.exec(); 
} 

當您關閉對話框(至少對我來說)不會關閉該應用程序。

解決方案是始終創建主窗口並確保關閉它。

0

我有同樣的問題。我的決議是 - 實現所有虛擬功能和所有插槽聲明。

5

這發生在我身上,因爲我在頭文件中做了一個聲明,然後刪除了cpp文件中的函數,我忘記刪除頭文件中的decleration。例如...

//header file 
class CLASS : public Q_OBJECT 
{ 
... 
protected: 
void mouseMoveEvent(QMouseEvent*); 
} 

//source file 

void CLASS::mouseMoveEvent(QMouseEvent*e) 
{ 
... 
} 
    //I'll delete this, then forget to delete "void mouseMoveEvent(QMouseEvent*);" in the header file 
+0

超煩人的bug。試圖找出這個錯誤30分鐘。無法找到它,這就是它(相同的功能和一切大聲笑)。 +++++++ – Toadums

1

在我的情況下,它聲明瞭明確的虛函數。

void virtual Func(MouseEvent*); // Error. 
void virtual Func(MouseEvent*) = 0; // Well! 
相關問題