标签: gnat

Mac OS 上的 Ada 编译器 GNAT

我正在尝试使用 mac 上的终端编译 ada,但总是收到此错误“错误:'-x ada' 中的值'ada'无效”有人知道如何解决此问题吗?

compiler-construction macos xcode ada gnat

5
推荐指数
1
解决办法
4747
查看次数

从大端数据中提取记录

我有以下用于网络协议实现的代码。由于协议是大端,我想使用Bit_Order属性和High_Order_First值,但似乎我犯了一个错误。

With Ada.Unchecked_Conversion;
with Ada.Text_IO; use Ada.Text_IO;
with System; use System;

procedure Bit_Extraction is

   type Byte is range 0 .. (2**8)-1 with Size => 8;

   type Command is (Read_Coils,
                    Read_Discrete_Inputs
                   ) with Size => 7;

   for Command use (Read_Coils => 1,
                    Read_Discrete_Inputs => 4);

   type has_exception is new Boolean with Size => 1;

    type Frame is record
      Function_Code : Command;
      Is_Exception : has_exception := False;
   end record
     with Pack => True,
     Size => 8;

   for Frame …
Run Code Online (Sandbox Code Playgroud)

ada endianness gnat

5
推荐指数
2
解决办法
515
查看次数

在 Ada 中动态链接库会引入额外的依赖项

我在动态和静态链接 Ada 中的库时遇到问题。我准备了一个最低限度的工作示例。这三个文件定义了一个输出“Hello world”的库:

helloworld_lib.gpr :

project Helloworld_Lib is

   for Library_Name use "helloworld_lib";
   for Source_Files use ("helloworld_lib.adb", "helloworld_lib.ads");
   for Library_Kind use "static";
   for Library_Dir use "obj";

end Helloworld_Lib;
Run Code Online (Sandbox Code Playgroud)

helloworld_lib.adb

with Ada.Text_IO;

package body helloworld_lib is

   procedure Hello is
   begin
      Ada.Text_IO.Put_Line("Hello world");
   end Hello;

end helloworld_lib;
Run Code Online (Sandbox Code Playgroud)

helloworld_lib.ads

with Ada.Text_IO;
use Ada.Text_IO;

package helloworld_lib is

   procedure Hello;

end helloworld_lib;
Run Code Online (Sandbox Code Playgroud)

这两个文件定义了一个导入库并运行它的项目:

helloworld_interface.gpr :

with "helloworld_lib.gpr";

project Helloworld_Interface is

   for Create_Missing_Dirs use "True";
   for Main use ("helloworld_interface.adb");
   for Source_Files use ("helloworld_interface.adb");
   for …
Run Code Online (Sandbox Code Playgroud)

dll ada gnat gnat-gps

5
推荐指数
1
解决办法
269
查看次数

如何使用gnatmake和Ada共享库编译和链接?

我无法再次为申请人编写花店图书馆.事实证明我对花店有更大的问题(同样的错误来自最新的2010 Adacore GPL下载和Debian的存档中的2009版本).花店有一些低级问题但是当我查看生成的文件时,它似乎正确地包含了errno.h.

以下是我建立花店时会发生的事情:

未定义引用`c_ntohs'./posix-io.o:函数`posix__io__open':posix-io.adb :(.text + 0x4d1):未定义引用`__gnat_florist_open'./ posix-io.o:函数中` posix__io__open_or_create':posix-io.adb :(.text + 0xfca):未定义引用`__gnat_florist_open'collect2:ld返回1退出状态gnatlink:调用/usr/bin/gcc-4.4时出错gnatmake:***链接失败.josh @ Mini10:〜/ Demo $ gnatbind -I/usr/share/ada/adainclude/florist -I/usr/include demo josh @ Mini10:〜/ Demo $ gnatlink demo ./posix-implementation.o:函数`posix__implementation__set_ada_error_code ':posix-implementation.adb :(.text + 0x19e):未定义对`store_errno'的引用./posix-implementation.o:函数`posix__implementation__get_ada_error_code':posix-implementation.adb :(.text + 0x1ab):

如果正确包含errno.h的问题,似乎这个错误很常见.但据我所知,posix-cc文件看起来都是正确的.有人对如何解决这个问题有任何建议吗?Florist的make文件正确构建,因此我不知道它来自何处.

ada gnat

4
推荐指数
1
解决办法
7068
查看次数

ada中的单独程序

我有一个非常大的项目,我正在尝试开始使用GPS(Gnat编程工作室)而不是我拥有的.

项目的命名约定如下:

something.1.ada的规格

某事物的东西

parents.son.2.ada用于单独的过程/函数,其中parent是声明单独的函数/过程的地方,son是单独的函数/过程的名称.它甚至可能更复杂,如grandparent.parent.son.2.ada

我的问题是我无法配置GPS以将单独的功能/程序识别为项目中的源文件.

这是一个巨大的项目,所以更改文件的名称或代码本身的任何其他更改不是我的选择,因为它会导致太多的麻烦.

如何正确配置GPS?

ada gnat

4
推荐指数
1
解决办法
1094
查看次数

如何在GPS中运行Ada代码

在GNAT Programming Studio中,您如何运行该程序?我看到它编译成功,但我看不到我的程序开始运行的位置.我想测试一下.

ide ada gnat

4
推荐指数
1
解决办法
5145
查看次数

如何确定Ada文件是使用静态还是动态精心编制的

我在检测到详细说明圆度方面遇到一些问题。我几乎可以确定所有源代码都是使用-gnatE编译的。

为了对此进行进一步调查,我想检查ada lib目录中的文件是否使用静态或动态详细说明进行编译。

是否存在可用来检索此信息的命令?我正在使用FSF-GNAT。

ada gnat

4
推荐指数
1
解决办法
73
查看次数

在定点声明中使用 gnat 出现奇怪的编译错误

编译失败并显示以下 F6 声明:

type F3 is delta 2.0**(-4) range 0.0 .. ((2.0**8)-1.0)*2.0**(-4);    -- byte  16#f.f#;
for f3'size use 8;

type F4 is delta 2.0**(-8) range 0.0 .. ((2.0**16)-1.0)*2.0**(-8);   -- word 16#ff.ff#
for f4'size use 16;

type F5 is delta 2.0**(-16) range 0.0 .. ((2.0**32)-1.0)*2.0**(-16); -- dword 16#ffff.ffff#
for f5'size use 32;

type F6 is delta 2.0**(-32) range 0.0 .. ((2.0**64)-1.0)*2.0**(-32); -- ldword 16#ffff_ffff.ffff_ffff#
for f6'size use 32;
Run Code Online (Sandbox Code Playgroud)

在 linux64/v8.0.3 和 learn.adacore.com 上同样失败。

编辑错误消息是“类型“f6”所需的大小 (65) 太大,允许的最大值为 64”

编辑添加'尺寸说明/预期的十六进制上限

编辑 …

fixed-point ada gnat

4
推荐指数
1
解决办法
131
查看次数

我可以将 pragma `Inline` 放在正文而不是规范中吗?

Ada Information Clearinghouse声明如下

使用编译指示Inline确实有其缺点。它可以在主体上创建编译依赖项;也就是说,当规范使用 pragma 时Inline,在使用规范之前可能需要编译规范和相应的主体。

将 pragmaInline放入 body是否可以避免这个问题?

inline ada pragma gnat

4
推荐指数
1
解决办法
159
查看次数

Ada/SPARK:我应该使用 GNATprove 吗?我在哪里可以找到它?

在Learning Ada的第 22.1 章中,尝试构建示例。

它期望安装 GNATprove。我使用的是 Ubuntu 18.04 LTS,但没有看到任何提供它的软件包。当我尝试查找主存储库时,我发现的只是Open Do中的内容,当我单击下载按钮时,它似乎是一个损坏的链接。Google 几乎没有提供有关 GNATprove 的信息,这有点令人担忧。

我是 Ada 新手,所以我真的不知道应该使用什么,所以如果 GNATprove 不正确,请告诉我。我通常也期望有一个免费的软件工具链——这是一个合理的期望还是我应该期望需要“专业”版本来了解 Ada/SPARK 的全部内容?

ada gnat spark-ada

4
推荐指数
1
解决办法
862
查看次数