Я просмотрел Google и не нашел ничего похожего на мою проблему, поэтому любая помощь приветствуется.
Сообщение об ошибке:
ld: main.efi.so: version node not found for symbol ??_C@_15JNBOKNOG@?$AA?$AN?$AA?6?$AA?$AA@
Полный выход:
ld -nostdlib -shared -Bsymbolic -Luefi uefi/crt_x86_64.o main.o -o main.efi.so -luefi -T uefi/elf_x86_64_efi.lds
ld: main.efi.so: version node not found for symbol ??_C@_15JNBOKNOG@?$AA?$AN?$AA?6?$AA?$AA@
ld: failed to set dynamic section sizes: bad value
make: *** [uefi/Makefile:89: main.efi.so] Error 1
Makefile 1:
ARCH = x86_64
TARGET = main.efi
SRCS = $(wildcard *.c)
CFLAGS = -pedantic -Wall -Wextra -Werror --ansi -O2
USE_GCC = 1
include uefi/Makefile
@ user3629249 Я так думаю? Я не очень хорошо разбираюсь в make-файлах, но строка, выполняющая команду компоновщика, - это $(LD) $(LDFLAGS) $^ $(LIBS)
, которая выглядит как правильная
относительно макросов lijke: CFLAGS = -pedantic -Wall -Wextra -Werror --ansi -O2
1) параметр --ansi
не является хорошей идеей, предложите удалить этот параметр. 2) чтобы make
не переоценивал время достижения макроса, на которое он ссылается, замените =
на :=
.
@ user3629249 спасибо за предложения
Утилита LD обрабатывает параметры слева направо, поэтому объектные файлы должны быть указаны перед путями и именами библиотек.