8

QtCreator でいくつかの異なるプロジェクトをビルドしているときに、次のビルド エラーが発生しました。

collect2: ld returned 1 exit status

いくつかのことを変更しただけで (ビルドの重要な変更はありません)、既に表示されている場合は表示されなくなり、表示されていない場合は表示されます。

学校プロジェクトの現在のプログラムで、rock03.cpp をコンパイルしようとしています。これはビルド内の唯一のファイルであり、main() メソッドがあります。正常に実行したばかりで、いくつかの s の順序を変更するために戻ったところif()、関連する警告が 2 つしか表示されません。

overriding commands for target 'rock03.o'

ignoring old commands for target 'rock03.o'

問題のエラーとともに。

なぜこれが起こるのか誰にも分かりますか?合理的な確実性でエラーを再現することはできないようです.QtCreatorは、ビルドする前に何も文句を言いません.

ありがとう

4

10 に答える 10

5

これは、ヘッダー ファイルで宣言を行い、cpp ファイルで関数を削除し、ヘッダーで宣言を削除するのを忘れたためです。例えば...

 //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
于 2012-02-26T06:39:24.207 に答える
5

メッセージ エラーがリンカに関するこのメッセージのみである場合、プログラムがまだ実行中であり、リンカがバイナリ ファイルにアクセスできないことが原因である可能性があります。アプリケーションが停止していることを確認するか、まだ実行中の場合は強制終了してください。Qtcreator は、コンパイル前に前回の実行が停止されたかどうかを確認しません。

于 2009-09-28T07:51:39.153 に答える
2

このエラーは、リンケージの問題が原因で発生することもあります。たとえば、「extern」ディレクティブを使用してヘッダーファイルからいくつかの静的変数を宣言するのを忘れた場合などです。

于 2010-11-09T22:49:01.877 に答える
2

これをエラーとして受け取っている場合、コンパイラの出力は非常に役立ちますが、おそらく最初の候補は、出力プログラムがまだ開いていて、ファイルに書き込めないことです。このような孤独なcollect2エラー

于 2010-05-10T14:02:40.417 に答える
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();
}

ダイアログを閉じてもアプリは閉じません(少なくとも私にとっては)。

解決策は、常にメインウィンドウを作成し、必ず閉じることです。

于 2011-06-30T20:01:40.847 に答える
1

私の場合、クリア仮想関数を宣言していました。

void virtual Func(MouseEvent*); // Error.
void virtual Func(MouseEvent*) = 0; // Well!
于 2013-01-13T16:25:34.283 に答える
0

エラーには他にも多くの理由が考えられます。しかし、私にとっては、未使用のスロットをクラスから削除すると、問題は解決しました。

于 2011-01-12T06:06:05.947 に答える
0

私も同じ問題を抱えていました。私の解決策は、すべての仮想関数とすべてのスロット宣言を実装することです。

于 2012-02-10T13:59:29.130 に答える
-1

[コンパイル出力] ペインを確認すると、.pro ファイルが同じ .cpp ファイルを 2 回リンクしようとしていたことがわかります。

于 2009-11-08T07:36:05.190 に答える