Синтаксис компоновщика: компоновщик не использует все флаги компоновщика во время компоновки

У меня есть проект makefile. Я использую gnu gcc и в качестве компоновщика я использую gcc со следующим аргументом:

linkerCmdLine = $ (exe) -Wl, — начальная группа -nostdlib -Map = test_mapfile.map -l: libc.a -l: libgcc.a -l: libm.a -Wl, — конечная группа -o $ (выход)

Во время процесса компоновки компоновщик не использует все эти флаги:
Флаг -Map=test_mapfile.map не используется

Зачем??

Существует файл настроек проекта, в котором также хранятся настройки компоновщика.

\ u201ClinkerCmdLine \ = $ (exe) -Wl, —start-group -nostdlib -Map \ =. / 99_output / PUZ_GPF.map —gc-section -l \: libc.a -l \: libgcc.a -l \: libm.a -Wl, — конечная группа -o $ (вывод) \ u201D

Как правильно сохранить настройки?

Отредактировано:

С файлом карты работает нормально, но у меня действительно проблема с файлом компоновщика. Я использую только следующий флаг:

«linkerCmdLine = $ (exe) -Wl, —script = C: /workspace/test_project/test_linker_file.ld -static -o $ (вывод)»

Я получаю эту ошибку в окне консоли:

arm-none-eabi-gcc.exe: ошибка: нераспознанный параметр командной строки ‘—script = C: /workspace/test_project/test_linker_file.ld’

Я не понимаю почему, потому что файл карты и файл .ld относятся к флагам компоновщика.

0

Решение

-Wl, префикс передает только текущий аргумент с запятыми, разделяющими аргументы компоновщика. Итак, чтобы пройти -z defs, вы бы использовали -Wl,-z,defs,

Этот механизм работает только для истинных флагов, то есть когда позиция в командной строке не имеет значения. -l параметры не являются флагами, и драйвер компилятора gcc собирает их в отдельный список и передает их в одном блоке.

Так что эта техника не работает для нужной вам командной строки. С другой стороны, -nostdlib тормозит -lc -lgcc -lm это будет по умолчанию.

Обычно в спецификациях gcc есть сценарий (скрипт для драйвера компилятора) для использования --start-group а также --end-group вокруг стандартных библиотек при статической компоновке (что, по-видимому, и нужно).

Так что я думаю, что

linkerCmdLine=$(exe) -Wl,-Map=test_mapfile.map -static -o $(output)

должно работать для вашего случая.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]