У меня есть проект 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 относятся к флагам компоновщика.
-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)
должно работать для вашего случая.
Других решений пока нет …