GPRbuild: переключатель компилятора передается компоновщику
Я строю простую программу для ARM. GPRbuild выводит следующее:
gprbuild -p -P avocado_test.gpr (in directory: /home/rodeo/Projects/AvocadoTest)
Bind
[gprbind] run_avocado_test.bexch
[Ada] run_avocado_test.ali
Link
[link] run_avocado_test.adb
/opt/GNAT/arm-elf/bin/arm-eabi-ld: unrecognised emulation mode: cpu=cortex-m3
Supported emulations: armelf
gprbuild: link of run_avocado_test.adb failed
Compilation failed.
Из того, что я мог найти в Интернете, ld
имеет переключатель -m
который определяет режим эмуляции. Однако я не использую этот переключатель в компоновщике моего проекта. Я использую -mcpu=cortex-m3
включите компилятор, и похоже, что GPRbuild передает этот переключатель и компоновщику. Вот мой .gpr
файл:
project Avocado_Test is
for Source_Dirs use ("source");
for Object_Dir use "build";
for Main use ("source/run_avocado_test.adb");
for Target use "arm-eabi";
for Runtime ("Ada") use "ravenscar-sfp-sam3x8e";
package Builder is
for Executable_Suffix use ".elf";
for Switches ("Ada") use ("-j0");
end Builder;
package Compiler is
for Driver ("Ada") use "arm-eabi-gcc";
for Switches ("Ada") use (
"-mthumb",
"-mcpu=cortex-m3",
"-O2");
end Compiler;
package Binder is
for Driver ("Ada") use "arm-eabi-gnatbind";
end Binder;
package Linker is
for Driver use "arm-eabi-ld";
end Linker;
end Avocado_Test;
Почему компоновщик берет переключатель от компилятора? Как мне предотвратить это?
1 ответ
Я бы не использовал Driver
вообще, в любом из ваших пакетов GPR. однажды gprbuild
видит for Target use "arm-eabi";
он знает, чтобы подготовить arm-eabi-
к каждому инструменту.
Нет причин избегать передачи ключей компилятора драйверу компоновщика по умолчанию, который gcc
(в этом случае arm-eabi-gcc
), потому что он знает, какой из них передать компоновщику.
Вы можете найти их интересными из моего проекта cortex-gnat-rts: runtime.xml (но обратите внимание, детали могут отличаться от времени выполнения AdaCore), testbed.gpr.