如何正确编译和链接C程序? 我有一个记录器,我用C写的,并且把它包含在我正在处理的C++项目中。它工作得很好,但是我得到了一个来自CLAN+++的警告:“在C++模式下处理C输入为C++时,这种行为被禁止。”

如何正确编译和链接C程序? 我有一个记录器,我用C写的,并且把它包含在我正在处理的C++项目中。它工作得很好,但是我得到了一个来自CLAN+++的警告:“在C++模式下处理C输入为C++时,这种行为被禁止。”,c++,c,makefile,C++,C,Makefile,为了消除这个警告,我将记录器的编译移到make文件中自己的步骤中,并使用Clang编译了对象文件。然后,我将对该对象文件的引用添加到我的Clang++规则中,以进行链接。现在它无法正确链接:“链接器命令失败,退出代码为1” 我的makefile在下面。我如何正确地编译和链接这个C记录器,以便在Clang++中消除该警告 CC= clang++ PROG= ./bin/tetris OBJS= ./src/main.o ./src/Tetris.o ./src/states/BaseState.o

为了消除这个警告,我将记录器的编译移到make文件中自己的步骤中,并使用Clang编译了对象文件。然后,我将对该对象文件的引用添加到我的Clang++规则中,以进行链接。现在它无法正确链接:“链接器命令失败,退出代码为1”

我的makefile在下面。我如何正确地编译和链接这个C记录器,以便在Clang++中消除该警告

CC= clang++
PROG= ./bin/tetris
OBJS= ./src/main.o ./src/Tetris.o ./src/states/BaseState.o ./src/states/MenuState.o \
    ./src/states/GameState.o ./src/entities/Block.o ./src/entities/Tetromino.o \
    ./src/entities/Grid.o
LIBS= allegro-5.0 allegro_dialog-5.0 allegro_font-5.0 allegro_ttf-5.0 allegro_color-5.0 \
    allegro_primitives-5.0 allegro_main-5.0 allegro_image-5.0 allegro_audio-5.0 allegro_memfile-5.0
CXXFLAGS= -g -Wall -std=c++11 $(shell pkg-config --cflags ${LIBS})
LDFLAGS= $(shell pkg-config --static --libs ${LIBS})

all: logger $(PROG)

$(PROG): $(OBJS)
    mkdir -p ./bin
    $(CC) -v -o $(PROG) $(LDFLAGS) $(OBJS) ./src/util/SimpleLogger/simplog.o
    rm -f $(OBJS)

logger:
    clang -c -Wall ./src/util/SimpleLogger/simplog.c -o ./src/util/SimpleLogger/simplog.o

clean:
    rm -f $(PROG) $(OBJS)

<>这可能不是你要找的,但是你可以把它包含在C++文件中:

#ifdef __cplusplus
extern "C" {
#endif

// C code

#ifdef __cplusplus
}
#endif

<>这可能不是你要找的,但是你可以把它包含在C++文件中:

#ifdef __cplusplus
extern "C" {
#endif

// C code

#ifdef __cplusplus
}
#endif

<>这可能不是你要找的,但是你可以把它包含在C++文件中:

#ifdef __cplusplus
extern "C" {
#endif

// C code

#ifdef __cplusplus
}
#endif

<>这可能不是你要找的,但是你可以把它包含在C++文件中:

#ifdef __cplusplus
extern "C" {
#endif

// C code

#ifdef __cplusplus
}
#endif

该计划是能够在C和/或C++项目中使用这个记录器。这看起来不太有助于我达到这个目标…@ PopPosiChe这就是你如何让一个头C和C++兼容。@ PuxopyChy也在你的头文件中,写代码< CX= CLAN+++ <代码>和<代码> cc= CLAN<代码>。不要用C++编译器编译C代码。好,我在MaCH文件中改为<代码> CXX= CLAN+++ <代码>和<代码> cc= CLAN<代码>代码。但是现在它没有生成…在原子性中为
string.h
获取一个错误。h
“错误:使用未声明的标识符''uuuuu-ATOMIC'u-ACQ\u-REL'”
当我刚刚有
CC=clang++
时,由于那里的隐式规则,我所有的对象文件都是用g++编译的。好的,至于编译问题,我需要将它保留为
CC=clang++
,因为clang3.0显然不支持原子。这就是为什么编译这些对象文件时会回落到G++的原因。该计划是能够在C和/或C++项目中使用这个记录器。这看起来不太有助于我达到这个目标…@ PopPosiChe这就是你如何让一个头C和C++兼容。@ PuxopyChy也在你的头文件中,写代码< CX= CLAN+++ <代码>和<代码> cc= CLAN<代码>。不要用C++编译器编译C代码。好,我在MaCH文件中改为<代码> CXX= CLAN+++ <代码>和<代码> cc= CLAN<代码>代码。但是现在它没有生成…在原子性中为
string.h
获取一个错误。h
“错误:使用未声明的标识符''uuuuu-ATOMIC'u-ACQ\u-REL'”
当我刚刚有
CC=clang++
时,由于那里的隐式规则,我所有的对象文件都是用g++编译的。好的,至于编译问题,我需要将它保留为
CC=clang++
,因为clang3.0显然不支持原子。这就是为什么编译这些对象文件时会回落到G++的原因。该计划是能够在C和/或C++项目中使用这个记录器。这看起来不太有助于我达到这个目标…@ PopPosiChe这就是你如何让一个头C和C++兼容。@ PuxopyChy也在你的头文件中,写代码< CX= CLAN+++ <代码>和<代码> cc= CLAN<代码>。不要用C++编译器编译C代码。好,我在MaCH文件中改为<代码> CXX= CLAN+++ <代码>和<代码> cc= CLAN<代码>代码。但是现在它没有生成…在原子性中为
string.h
获取一个错误。h
“错误:使用未声明的标识符''uuuuu-ATOMIC'u-ACQ\u-REL'”
当我刚刚有
CC=clang++
时,由于那里的隐式规则,我所有的对象文件都是用g++编译的。好的,至于编译问题,我需要将它保留为
CC=clang++
,因为clang3.0显然不支持原子。这就是为什么编译这些对象文件时会回落到G++的原因。该计划是能够在C和/或C++项目中使用这个记录器。这看起来不太有助于我达到这个目标…@ PopPosiChe这就是你如何让一个头C和C++兼容。@ PuxopyChy也在你的头文件中,写代码< CX= CLAN+++ <代码>和<代码> cc= CLAN<代码>。不要用C++编译器编译C代码。好,我在MaCH文件中改为<代码> CXX= CLAN+++ <代码>和<代码> cc= CLAN<代码>代码。但是现在它没有生成…在原子性中为
string.h
获取一个错误。h
“错误:使用未声明的标识符''uuuuu-ATOMIC'u-ACQ\u-REL'”
当我刚刚有
CC=clang++
时,由于那里的隐式规则,我所有的对象文件都是用g++编译的。好的,至于编译问题,我需要将它保留为
CC=clang++
,因为clang3.0显然不支持原子。这就是为什么它在编译这些对象文件时会依赖于g++的原因。