我目前正在尝试编译一个混合了 cpp 和 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 文件包含一些结构和一些宏。