我正在尝试从Wikibooks学习Ada.我已经下载并安装了GNAT GPL 2011,在GPS IDE中创建了一个项目,并附带了一个示例hello world程序.
我遇到的问题是GPS IDE没有绑定和链接我的程序.从这里我发现了,gnatbind并且gnatlink必须在之后运行gcc.如果我从命令行手动执行此操作,则构建成功并正确生成可执行文件.但如果我点击GPS中的"全部构建",我得到的就是
gnatmake -d -PD:\path\to\project.gpr
gcc -c -I- -gnatA D:\path\to\hello.adb
[2011-06-23 13:05:17] process terminated successfully (elapsed time: 00.35s)
Run Code Online (Sandbox Code Playgroud)
并且仅生成*.o和*.ali文件.
如何制作GPS绑定并链接我的应用程序?
谁能告诉我如何为GNAT 找到或创建OpenCV的绑定?我想用Ada2005用OpenCV(1.0或2.X)实现一些程序,但我不知道怎么做.任何人都可以教我怎么做吗?
使用GNAT编译器,当我尝试编译或检查以下文件的语义时,我得到一些错误的变体package "Foo" does not allow a body.我是这门语言的新手,无法在互联网上的任何地方找到这个看似基本问题的答案.请指教.
foo.ads
package Foo is
type Shape_Enum is (Circle, Triangle, Rectangle);
end Foo;
Run Code Online (Sandbox Code Playgroud)
foo.adb
package body Foo is
procedure Foo is
MyShape : Shape_Enum;
begin
MyShape := Rectangle;
end Foo;
end Foo;
Run Code Online (Sandbox Code Playgroud) 我有这个 Ada 代码。
with Ada.Text_IO;
use Ada.Text_IO;
procedure for_Loop is
begin
for Counter in 'A'..'Z' loop
Put(Counter);
end loop;
New_Line;
end for_Loop;
Run Code Online (Sandbox Code Playgroud)
Ada 编译器 (gnatmake) 输出这些错误消息。
gcc -c for_loop.adb
for_loop.adb:6:24: ambiguous character literal
for_loop.adb:6:24: possible interpretation: Character
for_loop.adb:6:24: possible interpretation: Wide_Character
for_loop.adb:6:24: possible interpretation: Wide_Wide_Character
gnatmake: "for_loop.adb" compilation error
Run Code Online (Sandbox Code Playgroud)
代码有什么问题?
我想将Ada与Stm32F103 uc一起使用,但这是问题所在-GNAT 2016中没有内置的运行时系统。TI RTS还包含另一个cortex-m3 uc-zfp-lm3s,但似乎它需要一些全局性更新,无法简单更改内存大小/来源。
因此,存在一些问题:
某些机身是否为stm32f103提供RTS?
是否有关于cortex-m3或其他arm uc的低级人员的好书?
PS。当我尝试通过GPS运行程序时,使用zfp-lm3s会引发此错误:
Loading section .text, size 0x140 lma 0x0
Load failed
我目前正在大学实时编程语言课程中学习 Ada,并且有一个关于 SPARK 的问题。
我正在开发一个项目,其任务是监视离网电源。这项任务对于机器安全至关重要,因此应该尽可能没有错误,经过 SPARK 验证。
我收到这个奇怪的错误,我无法找到修复方法11:14 tasking in SPARK requires sequential elaboration (SPARK RM 9(2)) violation of pragma SPARK_Mode
原始代码有点长,但我能够通过一个最小的示例得到相同的错误。
规格:
pragma Profile (Ravenscar);
pragma SPARK_Mode;
with System;
package simple_monitoring is
function sign (val : in Float) return Float
with Pre => val >= 10.0;
task type myTask is
end myTask;
end simple_monitoring;
Run Code Online (Sandbox Code Playgroud)
实施:
pragma Profile (Ravenscar);
pragma SPARK_Mode;
with Ada.Real_Time; use Ada.Real_Time;
with Ada.Text_IO; use Ada.Text_IO;
package body simple_monitoring is
function sign (val : in Float) …Run Code Online (Sandbox Code Playgroud) 我有一个不寻常的情况,根本没有执行精简代码.这不是详细说明问题,而是所有问题的详细阐述.
问题在于我没有"讨论"有关的单位,但理论上它仍然应该是可访问的,只要它的详细说明发生.
当然,我可以为相关单元添加一个无用的"with",但在我的实际用例中,我必须使用大量单元.
我的问题是,如果在代码中,通过编译指示,在gpr项目文件中,或通过命令行开关,我可以强制编译器包含文件,即使它认为文件未被引用?
这是一个最小的工作示例:
as.ads:
package As is
type A is tagged null record;
type Nothing is null record;
function Create (Ignored : not null access Nothing) return A;
function Image (From : A) return String;
end As;
Run Code Online (Sandbox Code Playgroud)
as.adb:
package body As is
function Create (Ignored : not null access Nothing) return A is
(null record);
function Image (From : A) return String is ("A");
end As;
Run Code Online (Sandbox Code Playgroud)
finder.ads:
with Ada.Tags;
package Finder is
procedure Register (Name : String; Tag …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 Linux ( Fedora 29 )交叉编译一个以 Windows 为目标的 Ada 程序。我对编译一无所知,Gnat 项目经理文档无法帮助我这个菜鸟。我更喜欢在项目文件中使用开关,并使命令尽可能简单。我该怎么办?
我试过gprbuild -P logfilter.gpr --target=Windows导致
Error: no compiler found for language 'c', target = Windows, default runtime
Error: no compiler found for language 'ada', target = Windows, default runtime
logfilter.gpr:3:09: warning: no compiler specified for language "Ada", ignoring all its sources
logfilter.gpr:7:19: "log_filter_main.adb" is not a source of project "logfilter"
gprbuild: problems with main sources
Run Code Online (Sandbox Code Playgroud)
这是我的gprconfig:
prconfig has found the following compilers on your …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Spark 中编写代码,使用 Horner 方法计算多项式的值。变量Result由Horner计算,变量Z以经典方式计算。我做了很多不同的测试,我的循环不变式总是正确的。但是,我收到消息:
loop invariant might not be preserved by an arbitrary iteration
Run Code Online (Sandbox Code Playgroud)
是否存在循环不变量不起作用的情况,或者您是否需要向不变量添加更多条件?
这是我的主函数,它调用我的 Horner 函数:
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;
with Poly;
use Poly;
procedure Main is
X : Integer;
A : Vector (0 .. 2);
begin
X := 2;
A := (5, 10, 15);
Put(Horner(X, A));
end Main;
Run Code Online (Sandbox Code Playgroud)
和霍纳函数:
package body Poly with SPARK_Mode is
function Horner (X : Integer; A : Vector)
return Integer
is
Result : Integer := 0;
Z …Run Code Online (Sandbox Code Playgroud)