нечетная ошибка компоновщика при создании программы: «множественное определение `fnames’; src/main.o:(.data.rel.local+0x0): сначала определено здесь’

Итак, я программирую программу, которая настолько разрослась, что я решил создать много файлов для этого проекта (как я делал раньше). После создания 2 файлов и добавления в них соответствующих функций, это ошибки, которые я получаю при создании.

/bin/ld: src/util.o:(.data.rel.local+0x0): multiple definition of `fnames'; src/main.o:(.data.rel.local+0x0): first defined here
/bin/ld: src/util.o:(.data+0x0): multiple definition of `gBoard'; src/main.o:(.data+0x0): first defined here
/bin/ld: src/possiblemoves.o:(.data.rel.local+0x0): multiple definition of `fnames'; src/main.o:(.data.rel.local+0x0): first defined here
/bin/ld: src/possiblemoves.o:(.data+0x0): multiple definition of `gBoard'; src/main.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status
make: *** [Makefile:22: vgcp] Error 1

Вот мой Makefile:

IDIR=/usr/include/SDL2
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=src

LIBS=-lSDL2 -lSDL2_image

_DEPS = main.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

_OBJ = main.o util.o possiblemoves.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))

all: vgcp clean


$(ODIR)/%.o: %.c $(DEPS)
    $(CC) -c -o [email protected] $< $(CFLAGS)

vgcp: $(OBJ)
    $(CC) -o [email protected] $^ $(CFLAGS) $(LIBS)

.PHONY: clean

clean:
    rm -f $(ODIR)/*.o

С Makefile проблем нет, было бы лучше, если бы вы вместо этого разместили код (по крайней мере, соответствующие фрагменты), чтобы можно было получить более конкретные ответы.   —  person Victor Ocampo    schedule 18.06.2020

См. также:  Что не так с управляющими символами в инструменте командной строки PHPUnit?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Victor Ocampo

    Я решил проблему, просто просмотрев переполнение стека еще немного… Похоже, мне нужно использовать ключевое слово extern для моих переменных в заголовочном файле. Я получил свое решение отсюда: (.bss+0x0): множественное определение прокси

  2. Victor Ocampo

    Похоже, что у вас есть переменные fnames и gBoard, определенные во всех файлах util.c, possiblemoves.c и main.c, как и пытается предложить компоновщик.

    Определение должно оставаться только в одном из исходных файлов, в то время как вы можете поместить объявление для такой переменной в другие файлы, если вам нужно получить к ним доступ оттуда.

    Проблема была в заголовочном файле. gBoard/fnames были определены в заголовочном файле. Им просто нужно было ключевое слово «extern» person Victor Ocampo; 18.06.2020

    @VictorOcampo Поскольку переменные были связаны в сегменте .data, я думаю, у них также были инициализаторы. Вы переместили инициализаторы в один из файлов .c? person Victor Ocampo; 18.06.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: