2009-09-28 45 views
7

Trong khi xây dựng các dự án khác nhau trong QtCreator, tôi đã chạy qua build lỗi sau:QtCreator xây dựng lợi nhuận collect2: ld trở về trạng thái thoát 1

collect2: ld returned 1 exit status 

Sau khi chỉ thay đổi một vài điều (mà không cần thay đổi bất cứ điều gì đáng kể trong bản dựng), nó sẽ biến mất nếu nó đã xuất hiện, hoặc nó sẽ xuất hiện nếu nó không có ở đó.

Trong chương trình hiện tại của tôi cho một dự án trường học, tôi đang cố gắng biên dịch rock03.cpp. Đó là tệp duy nhất trong bản dựng và có phương thức main(). Tôi vừa chạy nó thành công, và đi lại để thay đổi thứ tự của một số if() s, bây giờ, tôi chỉ nhận được hai cảnh báo có liên quan:

overriding commands for target 'rock03.o' 

ignoring old commands for target 'rock03.o' 

cùng với các lỗi trong câu hỏi.

Có ai biết tại sao điều này xảy ra không? Tôi dường như không thể tạo lại lỗi với bất kỳ sự chắc chắn hợp lý nào và QtCreator không phàn nàn về bất kỳ điều gì trước khi tôi xây dựng.

Cảm ơn

+1

'collect2: ld trả về 1 trạng thái thoát' không phải là thông báo lỗi. Nó chỉ là một lưu ý rằng linker không thành công. Bạn có thể đăng các đầu ra lỗi trước đó không? –

+0

Không có dòng lỗi nào khác. Thats tất cả để có nó. –

+4

Nếu bạn nhấp vào nút "Biên dịch đầu ra", bạn sẽ nhận được đầu ra liên kết, nó không hiển thị trong đầu ra lỗi xây dựng bình thường trong trình tạo qt. –

Trả lời

-1

Kiểm tra ngăn "Đầu ra biên dịch" cho biết tệp .pro đang cố liên kết cùng một tệp .cpp hai lần.

5

Nếu thông báo lỗi chỉ là một trong những liên quan đến mối liên kết này, lý do có thể là chương trình của bạn vẫn chạy và mối liên kết không thể truy cập vào các tập tin nhị phân. Hãy chắc chắn rằng ứng dụng của bạn đã bị dừng hoặc giết nó nếu vẫn chạy. Qtcreator không bao giờ kiểm tra nếu chạy trước đó đã được ngừng trước khi biên dịch.

2

Đầu ra trình biên dịch thực sự hữu ích nếu bạn chỉ nhận được lỗi này, nhưng ứng cử viên đầu tiên có lẽ bạn vẫn có chương trình đầu ra mở và không thể ghi vào tệp, vì sẽ cung cấp cho bạn một lỗi collect2 đơn độc như thế này

2

Lỗi này cũng có thể xảy ra do các sự cố liên kết, ví dụ, bạn quên khai báo một số biến tĩnh từ tệp tiêu đề bằng chỉ thị 'extern'.

0

Có thể có nhiều lý do khác cho lỗi này. Nhưng đối với tôi, khi loại bỏ SLOTS chưa được sử dụng khỏi lớp, vấn đề đã được giải quyết.

1

Điều này xảy ra khi bạn không đóng ứng dụng chính của mình (vì vậy tệp thực thi đầu ra vẫn đang chạy, nhưng không có bất kỳ cửa sổ hiển thị nào). Một ví dụ:

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

Ứng dụng này kết thúc tốt đẹp khi bạn đóng cửa sổ chính, nhưng mã này

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

không đóng ứng dụng khi bạn đóng hộp thoại (ít nhất là đối với tôi).

Giải pháp là luôn tạo cửa sổ chính và đảm bảo bạn đóng cửa sổ.

0

Tôi đã gặp vấn đề tương tự. Độ phân giải của tôi là - triển khai tất cả các chức năng ảo và tất cả các khai báo vùng.

5

Điều này xảy ra với tôi vì tôi thực hiện khai báo trong tệp tiêu đề, sau đó xóa hàm trong tệp cpp và tôi quên xóa phần giải mã trong tiêu đề. Ví dụ:

//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

Lỗi siêu gây phiền nhiễu. Đã cố gắng tìm ra lỗi này trong 30 phút. Không thể tìm thấy nó, và điều này là chính xác nó (cùng một chức năng và tất cả mọi thứ lol). +++++++ – Toadums

1

Trong trường hợp của tôi, nó đã khai báo hàm ảo rõ ràng.

void virtual Func(MouseEvent*); // Error. 
void virtual Func(MouseEvent*) = 0; // Well! 
Các vấn đề liên quan