Я получаю ошибку времени ссылки:
WARNING: /home/gulevich/development/camac-fedorov/camac/linux/k0607-lsi6/camac-k0607-lsi6.o (.ctors): unexpected non-allocatable section.
Did you forget to use "ax"/"aw" in a .S file?
Note that for example contains
section definitions for use in .S files.
Код, вызывающий ошибку (блок в источнике C):
# if defined(__ELF__)
# define __SECTION_FLAGS ", \"aw\" , @progbits"
/* writable flag needed for ld ".[cd]tors" sections bug workaround) */
# elif defined(__COFF__)
# define __SECTION_FLAGS ", \"dr\""
/* untested, may be writable flag needed */
# endif
asm
(
".section .ctors" __SECTION_FLAGS "\n"
".globl __ctors_begin__\n"
"__ctors_begin__:\n"
".previous\n"
);
Там какой-либо путь состоит в том, чтобы зафиксировать это? Идея состоит в том, чтобы поместить переменную __ctors_begin__
в начале определенного раздела памяти. Этот код является наследием, которое хорошо работало с помощью другой системы сборки и более старого компилятора.
Значение этого ассемблерного кода, объясненного в ответе на мой предыдущий вопрос.
Длинный план:
Возможно, ваш компоновщик ожидает формат ELF (вместо COFF), и по какой-то причине __ ELF __
не определен? Вы проверили вывод препроцессора для этой конкретной сборки?
Я бы хотел проверить значение __ SECTION_FLAGS
, просто чтобы убедиться, что он действительно содержит ax или aw. Я также был бы уверен, что __ COFF __
не определен, а __ ELF __
- есть. В противном случае, возможно, пришло время взять (возможно) предыдущую или будущую версию компилятора / компоновщика и посмотреть, решит ли это вашу проблему. Возможно, вы могли бы скомпилировать свой код как C ++ и каким-то образом позволить скриптам компилятора / компоновщика / ссылки делать то, что они должны делать? Совершенно не знаю, но я бы начал с этого.
очень длинный вопрос, но определен ли раздел .ctors так, как вы хотите, в сценарии компоновщика? ld iirc имеет подробный параметр для отображения сценария компоновщика.
Разделы работают нормально. Поэтому я проигнорирую это предупреждение.