错误我试图编译我的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'
是否有人也许有一些想法是我我在这里做错了:/
拥有源代码是有用的,你可能有功能'khStrInt'在头文件中定义(定义意味着它有一个机构),并有头文件'include'd在多个'.c'文件中。这意味着编译会多次生成'khStrInt'的代码,所以你会得到多个定义错误。类似的事情适用于您的其他多重定义。只需在头文件中声明函数并在'.c'文件中定义函数体即可解决此问题。 – Winestone
Unforunately,这是没有问题...... khStrInt仅仅是一个常数'const int的khStrInt = 33'在getRoot.h定义,然后将其他文件都包括这个头文件来使用它。 – malajedala
是的,我正在构建正如你所建议的代码,所以在头写的函数原型,然后定义在C文件中的函数体,然后包括在C文件的头,我需要他们 – malajedala