現在、私は現在cppとcが混在している既存のプロジェクトをコンパイルしようとしています。C/C++重複したシンボルエラー
私のメイクファイルは次のとおりです。
execute: mgnsvd.o multifit.o cit.o main.o
g++ -Wall -g multifit.o cit.o main.o mgnsvd.o -lgsl -lgslcblas -o execute
main.o: main.cpp cit.cpp
g++ -Wall -g -c main.cpp
cit.o: cit.cpp mgnsvd.c multifit.h
g++ -Wall -g -c cit.cpp
multifit.o: multifit.c mgnsvd.c multifit.h
g++ -Wall -g -c multifit.c
mgnsvd.o: mgnsvd.c
g++ -Wall -g -c mgnsvd.c
そして、私のメインの#include "cit.cpp" をコメントアウトし、それがうまくコンパイルであれば、むしろ平野
// global libraries
#include <iostream>
// local files
#include "cit.cpp"
// using directives
using std::endl;
using std::cout;
// main
int main(){
cout << "Hello, world" << endl;
return 0;
}
です。しかし、私はそれを含めると、次のエラーが発生します。
ld: duplicate symbol _first_function_in_cit in main.o and cit.o for architecture x86_64
_first_functionは、常に最初の関数であり、定義された、あるいは他の場所で使用/宣言されていません。オブジェクトファイルのgrepは、その関数がmain.oに組み込まれているようだが、それはなぜですか?私は以前にC++/Cプロジェクトに取り組んでいませんでしたので、いくつかの標準エラーが出ていますか?私はOSXにもあります。
レコードの場合、クラスはありません。.hファイルにはいくつかの構造体といくつかのマクロが含まれています。
cit.cppの必要はありません
なぜあなたは 'cit.cpp'を含んでいますか?私は実装ファイルを前提としていますか?あなたはそのファイルを見せてくれますか?ファイルを一緒にコンパイルすることができます。 – birryree