gpt4 book ai didi

编译错误,错误如 "multiple definition"

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:30 25 4
gpt4 key购买 nike

我正在尝试编译我的 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'

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

最佳答案

在你的头文件中,你应该像这样声明你的变量:

extern const int khStrInt;

然后在 .c 文件中,你应该这样定义它:

const int khStrInt = 33;

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

关于编译错误,错误如 "multiple definition",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42056868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com