У меня есть проект makefile. Я использую gnu gcc и как компоновщик, я использую gcc со следующим аргументом:
linkerCmdLine = $ (exe) -Wl, - start-group -nostdlib -Map = test_mapfile.map -l: libc.a -l: libgcc.a -l: libm.a -Wl, --end-group -o $ (выход)
Во время процесса компоновки компоновщик не использует все эти флаги: флаг -Map=test_mapfile.map
не используется.
Зачем??
Существует файл настроек проекта, и в нем также хранятся настройки компоновщика.
\u201ClinkerCmdLine\= $ (exe) -Wl, --start-group -nostdlib -Map\=./99_output/PUZ_GPF.map --gc-sections -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 $ (output)"
Я получаю эту ошибку в окне консоли:
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
для использования --start-group
и --end-group
вокруг стандартных библиотек при связывании статически (что похоже на то, что вы хотите сделать).
Поэтому я думаю, что
linkerCmdLine=$(exe) -Wl,-Map=test_mapfile.map -static -o $(output)
должен работать для вашего дела.