使用"多重定义"等错误编译错误

时间:2017-02-05 20:21:21

标签: c compiler-errors

我正在尝试编译我的C程序,我得到一些奇怪的编译错误,我不知道它来自哪里。我已经找到了类似的帖子,但他们使用-o指定输出的解决方案无效。

这就是我的makefile的样子(缩短了):

CC = gcc -O3 -Wextra -Wall -pg -g -std=c99

OBJ = ./src/main.o ./src/FUNC.o ./src/getRoot.o ./src/getTree.o 

out: $(OBJ)
    g++ -std=c99 -g -o ./myProgramm $(OBJ)


./src/FUNC.o: src/FUNC.c
    $(CC) -c src/FUNC.c -o ./src/FUNC.o

./src/main.o: src/main.c
    $(CC) -c src/main.c -o ./src/main.o

./src/getRoot.o: src/getRoot.c
    $(CC)   -c src/getRoot.c -o ./src/getRoot.o

./src/getTree.o: src/getTree.c
    $(CC)   -c src/getTree.c -o ./src/getTree.o

这是我得到的错误的一部分:

./src/FUNC.o:(.rodata+0x78): multiple definition of `khStrInt'
./src/main.o:(.rodata+0x0): first defined here
./src/FUNC.o: In function `get_nbr_edge_kmer':
 /home/Documents/EXAMPLE_CODE/src/FUNC.c:126: multiple definition of `DISTANCE_MAX'
./src/main.o:(.rodata+0x4): first defined here
./src/getRoot.o:(.rodata+0x0): multiple definition of `DISTANCE_MAX'
./src/main.o:(.rodata+0x4): first defined here
 ./src/main.o:(.rodata+0x4): first defined here
 ./src/getTree.o:(.rodata+0x0): multiple definition of `DISTANCE_MAX'
 ./src/main.o:(.rodata+0x4): first defined here
 ./src/getRoot.o:(.rodata+0x0): multiple definition of `khStrInt'

有人可能知道我在做错了什么:/

2 个答案:

答案 0 :(得分:1)

在头文件中,您应该声明您的变量:

extern const int khStrInt;

然后在.c文件中,您应该将其定义为:

const int khStrInt = 33;

这意味着变量定义仅在编译.c文件时由编译器生成一次,因此链接器不会看到多个定义。此外,在头文件中使用声明允许包含头的其他文件能够使用该变量。

答案 1 :(得分:-1)

很可能这个问题是由缺少#include警卫造成的。

防止文件被多次包含

#ifndef myheader_h
#define myheader_h

#define DISTANCE_MAX 1000

#endif