首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPRbuild:正在传递给链接器的编译器开关

GPRbuild:正在传递给链接器的编译器开关
EN

Stack Overflow用户
提问于 2019-03-17 22:20:18
回答 1查看 795关注 0票数 2

我正在为ARM建立一个简单的程序。GPRbuild输出以下内容:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
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;

为什么链接器要从编译器中获取一个开关?我怎么才能防止这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 08:56:18

我根本不会在你的探地雷达包中使用Driver。一旦gprbuild看到for Target use "arm-eabi";,它就知道将arm-eabi-添加到每个工具中。

没有理由避免将编译器切换到默认的链接器驱动程序,即gcc (在本例中是arm-eabi-gcc),因为它知道其中哪个应该传递给链接器。

您可能会从我的皮层--小虫项目中发现这些有趣的内容:runtime.xml (但请注意,细节可能与AdaCore的运行时不同),testbed.gpr

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55212522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档