我目前正試圖編譯一個現有的項目,它是cpp和c的混合體。C/C++重複符號錯誤
我的makefile如下;
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
而我主要是一個相當普通
// 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;
}
如果是註釋掉的#include 「cit.cpp」 它編譯罰款。但是,如果我包含它會發生以下錯誤;
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',這是我假設的一個實現文件?你能告訴我們那個文件嗎?你可以一起編譯這些文件。 – birryree