`多个​​定义`很多变量错误 - 我的make文件不正确?

时间:2016-10-10 11:40:42

标签: c gcc makefile

当我编译multiple definition of许多变量时,我收到错误。例如:

/tmp/ccwHwJ7t.o:(.data+0x0): multiple definition of `serial_number'
/tmp/ccmT1XNI.o:(.data+0x0): first defined here

所有变量都位于ftdi.h中,main.c包含这些变量。我的make文件有什么问题导致它被包含两次吗?或者我是在寻找错误的方向。

SSHELL = /bin/sh
CC    = gcc

APP = npi_usb_ftdi
INC = include

INCDIRS +=-I${INC}

CFLAGS= ${INCDIRS} -Wall -Wextra
LIBS = libftd2xx.a  -ldl -lpthread -lrt


all: ${APP}

${APP}: src/main.c src/ftdi.c src/vt100.c src/monitor.c
    ${CC} ${CFLAGS} src/main.c src/ftdi.c src/vt100.c src/monitor.c -o ${APP} ${LIBS} 

ftdi.o:
    ${CC} -c -o src/ftdi.o src/ftdi.c

vt100.o:
    ${CC} -c -o src/vt100.o src/vt100.c

monitor.o:
    ${CC} -c -o src/monitor.o src/monitor.c


clean:
    rm -f src/*.o ; rm -f src/*~ ; rm -f *~ ; rm -f ${APP}

1 个答案:

答案 0 :(得分:1)

您可能也将.h文件包含在其他源文件中。没问题,但只应在一个源文件中声明变量,而在其他刚刚定义的变量中。我用:

// ftdi.h
#ifndef EXTERN
# define EXTERN extern
#endif
EXTERN int examplevar;

// main.c
#define EXTERN
#include "ftdi.h"

// ftdi.c
#include "ftdi.h"