QtCreator ビルドはcollect2を返します:ld は終了ステータス 1 を返しました
-
18-09-2019 - |
質問
QtCreator でいくつかの異なるプロジェクトをビルドしているときに、次のビルド エラーが発生しました。
collect2: ld returned 1 exit status
いくつかのことを変更しただけで (ビルド内で重要な変更は何もありません)、すでに表示されている場合は表示されなくなり、存在しない場合は表示されます。
学校のプロジェクト用の現在のプログラムで、rock03.cpp をコンパイルしようとしています。これはビルド内の唯一のファイルであり、main() メソッドがあります。ちょうど正常に実行できたので、いくつかの順序を変更するために戻ってきました。 if()
さて、現在は、関連する警告が 2 つだけ表示されています。
overriding commands for target 'rock03.o'
そして
ignoring old commands for target 'rock03.o'
問題のエラーも一緒に。
なぜこれが起こるのか知っている人はいますか?合理的な確実性を持ってエラーを再現することはできないようですが、ビルドする前に QtCreator は何も文句を言いませんでした。
ありがとう
解決 10
「出力をコンパイル」ペインをチェックすると、.PROファイルが二度同じ.cppファイルをリンクしようとしていたことが明らかになっています。
他のヒント
メッセージのみエラーがリンカについて、この1であれば、その理由は、あなたのプログラムがまだ実行されていることをすることができ、リンカはバイナリファイルにアクセスすることはできません。まだ実行されている場合は、アプリケーションが停止したり、それを殺したことを確認してください。 前回の実行をコンパイルする前に停止した場合Qtcreatorをチェックすることはありません。
これは、私はヘッダファイルに宣言をするので、私に起こる、その後の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
コンパイラの出力は、本当に便利ですが、そのため、第一候補は、あなたはまだ出力プログラムが開いて持っていることはおそらくあり、そしてそれは、ファイルに書き込むことはできませんこのようにあなたの孤独collect2はエラーを与えるでしょう。
このエラーはためにも連携して問題の発生する可能性があり、たとえば、あなたは「のextern」ディレクティブを使用して、ヘッダファイルからいくつかの静的変数を宣言するのを忘れています。
これは、あなたのメインのアプリを閉じていない場合(その出力の実行ファイルがまだ実行しますが、任意の可視ウィンドウなしている)が起こります。例:
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();
}
あなたは(少なくとも私にとっては)ダイアログを閉じたときにアプリを閉じません。
ソリューションは、常にあなたのメインウィンドウを作成し、それを閉じていることを確認することです。
私の場合はそれがクリアされた仮想関数を宣言してます。
void virtual Func(MouseEvent*); // Error.
void virtual Func(MouseEvent*) = 0; // Well!
私の場合、フォルダーのアクセス許可が問題でした。 [コンパイル出力] ウィンドウを確認することは、問題の内容を正確に特定するために非常に重要です。 (QtCreator はその点で Visual Studio の逆なので、慣れるのに時間がかかります。) 権限を適切に設定しようとしましたが、その後は機能しなかったようで、最終的にシャドウ ビルドを無効にしてから、 「ツール/オプション/ビルド&実行/全般/プロジェクトディレクトリ」をクリックし、「ディレクトリ」を「.」に設定します。そして、ついにコンパイルされました。「それ」は、Qt 5.11 の kmap2qmap プロジェクトです。
誰かが役立つかもしれない場合に備えて、私の 2 セントだけ。
エラーのためのより多くの理由があるかもしれません。しかし、私のために、クラスから未使用のスロットの削除で問題が解決した。
私は同じ問題を抱えていました。私の解像度がある - すべての仮想関数およびすべてのスロットの宣言を実装する
。