В настоящее время я пытаюсь скомпилировать существующий проект, представляющий собой сочетание cpp и c.Ошибка повторяющихся символов C/C++
My 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