在C+中包含C文件+;生成文件 我在C++中编码,并有一个完美的工作文件。然后,为了一个项目,我不得不上网寻找代码来完成我想做的事情。原来代码可以混合C文件以及C++文件。当我现在尝试编译时,我有一个未定义的架构x86_64符号错误。我很确定这是因为我没有正确地修改我的makefile。我一直在四处寻找,试图找到答案,但什么都不适合我。也许如果有人看一下这个makefile,我想会更容易。我还注意到,没有一个.o文件是为我的.c文件制作的,但它们是为.cpp制作的

在C+中包含C文件+;生成文件 我在C++中编码,并有一个完美的工作文件。然后,为了一个项目,我不得不上网寻找代码来完成我想做的事情。原来代码可以混合C文件以及C++文件。当我现在尝试编译时,我有一个未定义的架构x86_64符号错误。我很确定这是因为我没有正确地修改我的makefile。我一直在四处寻找,试图找到答案,但什么都不适合我。也许如果有人看一下这个makefile,我想会更容易。我还注意到,没有一个.o文件是为我的.c文件制作的,但它们是为.cpp制作的,c++,c,makefile,linker,C++,C,Makefile,Linker,希望有人能帮忙。我已经坚持了三天了 ##### Configurable options: # --------------------------------------------------------------------- # Compiler section # --------------------------------------------------------------------- ## Compiler: CC=gcc #CC=cc CPP=g++ ##

希望有人能帮忙。我已经坚持了三天了

##### Configurable options:

# ---------------------------------------------------------------------
# Compiler section 
# ---------------------------------------------------------------------

## Compiler:
CC=gcc
#CC=cc
CPP=g++

## Compiler flags:

# GCC:  (also -march=pentium etc, for machine-dependent optimizing)
CFLAGS=-Wall -O3 -fomit-frame-pointer -funroll-loops
LDFLAGS=-L/usr/local/lib
LIBS=-lopenbabel 
CPPFLAGS=$(CFLAGS) -I Project/Lib/openbabel-2.0/ -I ProjectCode/Include/ -I ProjectCode/Lib/boost_1_60_0/
CXXFLAGS=-Wall -g -std=c++11 -I.

# GCC w/ debugging:
#CFLAGS=-Wall -g -DINLINE

# Compaq C / Digital C:
#CFLAGS=-arch=host -fast

# SunOS:
#CFLAGS=-fast

## Program options:

# Enable long options for cl (eg. "cl --help"), comment out to disable.
# Requires getopt_long(3)  (a GNU extension)
LONGOPTS = -DENABLE_LONG_OPTIONS


# ---------------------------------------------------------------------
# Directories section 
# ---------------------------------------------------------------------


OBJFILES = ProjectCode/Objects/Project.o ProjectCode/Objects/stdafx.o ProjectCode/Objects/BoxTools.o ProjectCode/Objects/TanimotoStruct.o
COBJFILES = ProjectCode/Objects/cliquer.o ProjectCode/Objects/graph.o ProjectCode/Objects/reorder.o

EXEC = Project



# ---------------------------------------------------------------------
# Compilation section 
# ---------------------------------------------------------------------

ProjectCode/Objects/%.o: ProjectCode/Source/%.c
$(CC) -o $@ -c $< $(CFLAGS) $(LIBS)
ProjectCode/Objects/%.o: ProjectCode/Source/%.cpp
$(CPP) $(CPPFLAGS) -o $@ -c $<
Project: $(OBJFILES)
$(CPP) $(LDFLAGS) -o $@ $^ $(CXXFLAGS) $(LIBS);


# ---------------------------------------------------------------------
# Cleaning section 
# ---------------------------------------------------------------------

clean:
     rm -f ProjectCode/Objects/*.o $(EXEC)
可配置选项:
# ---------------------------------------------------------------------
#编译部分
# ---------------------------------------------------------------------
##编译器:
CC=gcc
#CC=CC
CPP=g++
##编译器标志:
#GCC:(也可以-march=pentium等,用于依赖于机器的优化)
CFLAGS=-Wall-O3-fomit帧指针-funroll循环
LDFLAGS=-L/usr/local/lib
LIBS=-lopenbabel
CPPFLAGS=$(CFLAGS)-I Project/Lib/openbabel-2.0/-I ProjectCode/Include/-I ProjectCode/Lib/boost\u 1\u 60\u 0/
CXXFLAGS=-Wall-g-std=c++11-I。
#带调试的GCC:
#CFLAGS=-Wall-g-DINLINE
#康柏C/Digital C:
#CFLAGS=-arch=host-fast
#苏诺斯:
#CFLAGS=-fast
##计划选项:
#为cl启用长选项(例如“cl--help”),注释为禁用。
#需要getopt_long(3)(GNU扩展)
LONGOPTS=-可更改的\u LONG\u选项
# ---------------------------------------------------------------------
#目录部分
# ---------------------------------------------------------------------
OBJFILES=ProjectCode/Objects/Project.o ProjectCode/Objects/stdafx.o ProjectCode/Objects/BoxTools.o ProjectCode/Objects/TanimotoStruct.o
COBJFILES=ProjectCode/Objects/cliquer.o ProjectCode/Objects/graph.o ProjectCode/Objects/reorder.o
EXEC=项目
# ---------------------------------------------------------------------
#编辑部
# ---------------------------------------------------------------------
ProjectCode/Objects/%.o:ProjectCode/Source/%.c
$(CC)-o$@-c$<$(CFLAGS)$(LIBS)
ProjectCode/Objects/%.o:ProjectCode/Source/%.cpp
$(CPP)$(CPPFLAGS)-o$@-c$<
项目:$(OBJFILES)
$(CPP)$(LDFLAGS)-o$@$^$(CXXFLAGS)$(LIBS);
# ---------------------------------------------------------------------
#清洁部
# ---------------------------------------------------------------------
清洁:
rm-f ProjectCode/Objects/*.o$(EXEC)

您只是对C对象文件没有任何依赖关系。你需要添加它们。对于CPP,您有以下内容:

Project: $(OBJFILES)
    $(CPP) $(LDFLAGS) -o $@ $^ $(CXXFLAGS) $(LIBS);
但它可能看起来像:

Project: $(OBJFILES) $(COBJFILES)
    $(CPP) $(LDFLAGS) -o $@ $^ $(CXXFLAGS) $(LIBS);

同时,您的每个
%.o
文件同时依赖于
%.cpp
%.c
。您可能希望以某种方式将它们分开,否则您只会得到关于没有规则来创建其他目标的错误外“C”{ /代码>?是的,它包括如下内容:Extn“C”{“Cul.h”}请注意,在<代码>中,制作<代码> >代码>自动工具< /Cord>约定,CPP=你的C预处理器。CXXX=C++编译器。你好,首先,谢谢你的帮助。我尝试了你的解决方案,它让我摆脱了大部分的架构错误,还有一些,但是我会研究一下。第二点,你的意思是这样的吗?o:cliquer.h set.h graph.h misc.h reorder.h Makefile cliquerconf.h