我正在构建我自己的Ada运行时系统。
但是,只有当自定义运行时名为'gnat‘并编译为'libgnat.a’时,才能再次链接自定义运行时,如果我称它为“libgnat.a”,则会得到ld错误:
/home/mark/opt/GNAT/2021/bin/../libexec/gcc/x86_64-pc-linux-gnu/10.3.1/ld:找不到-lgnat
对于如何配置它,我可以使用不同的名称,有什么想法吗?
下面是运行时的项目文件(大部分来自OSdev)
project milo is
for Languages use ("Ada");
for Runtime ("Ada") use Project'Project_Dir;
for Library_Auto_Init use "False";
for Library_Name use "milo"; -- that must be "gnat"
for Library_Kind use "static";
for Library_Dir use "lib";
for Object_Dir use "obj";
for Source_Dirs use ("src/zfp", "src/milo");
package Builder is
for Global_Configuration_Pragmas use "milo.adc";
for Switches ("Ada") use (
"-nostdlib",
"-nostdinc"
);
end Builder;
package Compiler is
for Default_Switches ("Ada") use (
"-O2",
"-ffunction-sections",
"-fdata-sections",
"-fcallgraph-info=su,da",
"-gnatp",
"-gnatn2",
"-gnat2012",
"-gnatg",
"-Wl,--gc-sections",
"-gnatyN"
);
end Compiler;
end milo;下面是我尝试使用这个运行时的项目
project Helloworld is
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Main use ("helloworld.adb");
for Runtime ("ada") use "/home/mark/Milo/milo/";
end Helloworld;发布于 2022-03-08 22:05:23
有关运行时的示例,请参见这里,其名称为stm32f4,用于STMicroelectronics中基于Cortex M4F的STM32F4 MCU。
要成为名为milo的运行时,结构至少必须是
$prefix/milo/adainclude
|
/adalib其中adainclude/保存源文件,adalib/保存.ali文件和库(通常是libgnat.a,因为它对用户是隐藏的)。
如果仅此而已,那么小虫就会对gprbuild --RTS=$prefix/milo很满意。但是在可能的情况下,您需要改变编译器处理Ada选项和链接器命令的方式。这是runtime.xml文件的工作,它是一个gprbuild配置文件。
在包Compiler中,请参见
Common_Required_Switches :=
("-mlittle-endian", "-mhard-float",
"-mcpu=cortex-m4", "-mfpu=fpv4-sp-d16", "-mthumb");对于适合于目标处理器的开关,它将应用于使用此运行时进行的每一次编译(您可能会说,-ffunction-sections和-fdata-sections怎么办,我不会给您一个好的答案!)
在包Linker中,请参见
for Required_Switches use Linker'Required_Switches &
("${RUNTIME_DIR(ada)}/adalib/libgnat.a") &
Compiler.Common_Required_Switches &
("-nostdlib", "-lm", "-lgcc", "-lc");
for Required_Switches use Linker'Required_Switches &
("-T", "${RUNTIME_DIR(ada)}/adalib/stm32f407-flash.ld");其中第一部分告诉链接器使用$prefix/milo/adalib/libgnat.a,第二个部分(可以与第一部分连接,现在我来看它)告诉链接器脚本使用,而不是编译器中的链接器脚本。
我认为这里添加的是--gc-sections。
&的存在是因为这是一个XML文件,而&需要转义。
发布于 2022-03-08 12:13:31
我以作弊告终,并创建了一个象征性的链接
-s libmilo.a libgnat.a
如果有更好的方法,请张贴!
https://stackoverflow.com/questions/71394362
复制相似问题