問題タブ [multiple-definition-error]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mingw - main.cpp 内のすべての関数の複数定義
.h と .cpp はすべてhttp://code.google.com/p/asmlib-opencv/からのものです。
彼の demo/main.cpp を使用しようとしていますが、必要なすべての .h を含めました。問題は、main.cpp のすべての関数に「複数の定義」があることです。プロジェクトを検索しましたが、他の場所では定義されていません。.h は #ifndef/#define で保護されています。それらが他の場所で定義されているかどうかを確認しました。複数回含まれているファイルがあるかどうかを検索しました。
Win7でMingw 4.8.1でQt 4.74を使用しています
エラー/警告
D:\Ptixiaki\test\QtTest\ASMLIBDEMO\Makefile.Debug:197: 警告: >target
debug/main.o' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\Makefile.Debug:147: warning: ignoring old commands for >target
debug/main.o' のコマンドをオーバーライドしていますD:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数
Z13buildASMModelRN9StatModel8ASMModelESsSsSs': c:\OpenCV2.3.1\QtBuild\install\include\opencv2\core\mat.hpp:58: multiple definition of
内 buildASMModel(StatModel::ASMModel&, std::string, std::string, std::string)' D:\Ptixiaki\ test\QtTest\ASMLIBDEMO\main.cpp:24: エラー: 最初にここで定義D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数
Z12readASMModelRN9StatModel8ASMModelESs': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:31: multiple definition of
内 readASMModel(StatModel::ASMModel&, std::string)' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp: 31: エラー: ここで最初に定義されましたD:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数
Z12searchAndFitRN9StatModel8ASMModelERN2cv17CascadeClassifierERKSsi': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:40: multiple definition of
内 searchAndFit(StatModel::ASMModel&, cv::CascadeClassifier&, std::string const&, int)' D:\Ptixiaki\test\ QtTest\ASMLIBDEMO\main.cpp:40: エラー: 最初にここで定義D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数
Z11asmOnWebCamRN9StatModel8ASMModelERN2cv17CascadeClassifierEi': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:64: multiple definition of
asmOnWebCam(StatModel::ASMModel&, cv::CascadeClassifier&, int) 内' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main. cpp:64: エラー: ここで最初に定義されたD:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数
Z8showHelpv': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:93: multiple definition of
showHelp() 内 D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:93: エラー: 最初にここで定義D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数
main': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:120: multiple definition of
main' 内 D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:120: エラー: 最初にここで定義:-1: エラー: collect2: ld が 1 つの終了ステータスを返しました
コード
c++ - C での C++ からのテンプレート
C で C++ 標準ライブラリからいくつかのクラスを再作成しようとしています。たとえば、std::pair クラスです。
テンプレートをエミュレートするために、もちろんマクロを使用しました。以下に例を示します。
この構造を複数のソース ファイルで使用しようとすると、コードを複数回生成する必要があります。それは明らかに、エラーにつながります。
これを修正して、これらの「テンプレート」を C で使用できるようにする方法はありますか?
c - C および CUDA-C コードの NVCC リンク エラー
私は DNA フラグメント アセンブリ プログラムに取り組んでいます。CPU のみのバージョンは GCC を使用して C 言語でビルドされており、NVCC を使用して GPU バージョンをビルドしようとしています。
ここにメイクファイルがあります
ご覧のとおり、元のファイルは、正しくコンパイルする.c
ために .cu ファイルになりました。nvcc
すべての cu ファイルには、対応するファイル (Common.cu の Common.h など) が含まれていますmain.cu
。
ILS.h には、グローバル変数の定義が含まれp_instanceFragments
ており、p_instanceLength
問題は、NVCC をコンパイルするときに、不明な理由で次のエラーが発生することです。
同じコードが GCC を使用して正しくビルドされるため、実際の複数の定義はありません。と によって、ILS.h
が nvcc に 2 回含まれているように見えます。複数のインクルードと無限のインクルード ループを避けるために、すべてのヘッダー ファイルをステートメントでラップしたため、これも不可能です。ILS.cu
Consensus.cu
#ifndef .. #define .. #endif
多分makefileコマンドで何か?または、リンクにgccを使用する必要がありますか? 対処方法を教えてください。
よろしく、
c++ - 異なるソース ファイルで宣言された同じ名前のクラスのコンパイラ/リンカー エラーなし
以下のように、同じ名前を宣言する 2 つのファイルがありますclass C
。
g++ C1.cpp C2.cpp
!で正常にコンパイルされます。
- 名前だけが同じ で本体が同じではない場合、コンパイラ/リンカー エラーが発生しないのはなぜですか?
- と非静的バージョン
C::foo(..)
の両方で、 なぜ serve の定義が 1 つなのですか?static
- または、これがコンパイラの別の未定義の動作ケースである場合、それを防ぐことはできますか?
c++ - D ライブラリを C++ コードにリンクする
最近、私は美しい言語 D を学びました。D はより柔軟で、安定した高速プログラムを作成するのに役立ちます。しかし、人気はありません... Dで書かれたコードはほとんどなく、CとC++で書かれたコードが多いためです。したがって、Andrei Alexanderscu の本を読んだ後、著者が D ライブラリの C++ コードへのリンクに関する質問を非常に表面的に説明した後、私はそれを自分で学び、AutomataInterface を実装する CompleteAutomata クラスのインスタンスを返す関数が定義されている D にいくつかのコードを書きました。 C++ コードで:
関連する D コード:
コードを記述した後、次のフラグを使用して、 2 つの異なるコンパイラ (dmd
および)で D ライブラリをコンパイルしました。gdc
また
ライブラリディレクトリへのパスを追加し(-L
オプション)、ライブラリを直接追加する(オプション)ことにより、受け取った各ライブラリをQtプロジェクトにリンクしようとすると-l
。どちらの場合もエラーが発生しました。
最初のdmd
ケースでは、「`_d_newclass' への未定義の参照」と別のエラーがいくつかあります。
2 番目のケース (を使用する場合gdc
) では、「の複数定義」に関するメッセージが表示されます。
そうしようと2日間試みた後...
最近、Phobos (D 標準ライブラリ) をリンク プロセスに追加しようとしています。dmd
-lphobos2 フラグの場合と-lgphobos2gdc
フラグの場合は対応しています。しかし、それは私を助けません...
dmd
リンカー出力を使用する場合:
libcurl-gnutls: の代わりに試してみましたln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl-gnutls.so.4
。次に、libcurl-gnutls に関するメッセージなしで同じリンクを作成した結果。
リンカー出力を使用する場合gdc
は、「複数の定義」について再度話します。
最後に librt.so.1 に関するメッセージが表示されます。/usr/lib64 を調べたところ、ライブラリ ファイルが表示されました。
D ライブラリーを C++ コードに接続する方法を教えてください。
c++ - テンプレートを使用した c++ 複数定義エラー
私はテンプレートベースのプログラミングに慣れていないので、プロジェクトをコンパイルするときにこのエラーが発生します
指定されたコードは完全に .h ヘッダー ファイル内にあります。この問題を解決するための指針は非常に高く評価されています。
コード:
c++ - 複数のC++ファイルで「複数定義」エラーが発生しますか?
初めて 1 つのプロジェクトで複数の C++ ファイルを使用しています。両方とも、保護された (#ifndef) ヘッダー ファイルを含める必要があります。ただし、それを行うと、複数定義エラーが発生します。
私が持っているのは、ヘッダーを直接呼び出す2つの.cppファイルと、間接的に1つ(別のインクルードに含まれています)、そしてそれを含む他の2つのヘッダーファイルです。
では、エラーを取り除くために何をする必要がありますか?
エラー:
obj\Debug\main.o||関数
Z14sortLibQtyTest4BookS_':| [PATH]\miscFuncs.h|16|multiple definition of
で sortLibQtyTest(Book, Book)'
コード:
問題を引き起こしているのはこれだけではなく、おそらく 10 以上の問題があり、中にはそれほど短くて甘くないものもあります。また、関数は複数のファイルで必要です。
c++ - ファイルを含めると、グローバルの複数の定義エラーが発生する
ファンキーな複数定義エラーが発生します。インクルード構造は次のとおりです。
メインには、バックエンドを含む vm が含まれます。
バックエンドに3 つのグローバルchar *
ポインターがあり、複数の定義エラーが発生するのはメンバーです。
vm.cpp
、main.cpp
およびmoc_vm.cpp
(Qtを使用しています)で複数の定義を取得します。
残りのソースでポインターを外部として宣言しようとしましたが、役に立ちませんでした。すべてのプリプロセッサ ガードが配置されていますが、明らかに 1 か所でしか定義されていないため、なぜエラーが発生するのかわかりません...
何か案は?
編集:これは奇妙です。BACKEND を MAIN に含めることができ、問題はありません。チェーンが MAIN>VM>BACKEND の場合にのみ、エラーが発生します。