Я пытаюсь скомпилировать мою программу на C, и я получаю некоторые странные ошибки компиляции, и я понятия не имею, откуда она. Я уже нашел похожие сообщения, но их решение указать выход с -o не работает.Ошибка компиляции с ошибками как «множественное определение»
SO это как мой 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
К сожалению, это не проблема ... khStrInt - это константа 'const int khStrInt = 33', определенная в getRoot.h, а затем другие файлы включают этот заголовочный файл, чтобы использовать его. – malajedala
И да, я структурирую код, как вы предложили, поэтому записывайте прототипы функций в заголовок, а затем определяете тела функций в c-файлах, а затем включаете заголовки в файлах C, где они мне нужны. – malajedala