我正在尝试使用 mac 上的终端编译 ada,但总是收到此错误“错误:'-x ada' 中的值'ada'无效”有人知道如何解决此问题吗?
我有以下用于网络协议实现的代码。由于协议是大端,我想使用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 中的库时遇到问题。我准备了一个最低限度的工作示例。这三个文件定义了一个输出“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) 我无法再次为申请人编写花店图书馆.事实证明我对花店有更大的问题(同样的错误来自最新的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文件正确构建,因此我不知道它来自何处.
我有一个非常大的项目,我正在尝试开始使用GPS(Gnat编程工作室)而不是我拥有的.
项目的命名约定如下:
something.1.ada的规格
某事物的东西
parents.son.2.ada用于单独的过程/函数,其中parent是声明单独的函数/过程的地方,son是单独的函数/过程的名称.它甚至可能更复杂,如grandparent.parent.son.2.ada
我的问题是我无法配置GPS以将单独的功能/程序识别为项目中的源文件.
这是一个巨大的项目,所以更改文件的名称或代码本身的任何其他更改不是我的选择,因为它会导致太多的麻烦.
如何正确配置GPS?
在GNAT Programming Studio中,您如何运行该程序?我看到它编译成功,但我看不到我的程序开始运行的位置.我想测试一下.
我在检测到详细说明圆度方面遇到一些问题。我几乎可以确定所有源代码都是使用-gnatE编译的。
为了对此进行进一步调查,我想检查ada lib目录中的文件是否使用静态或动态详细说明进行编译。
是否存在可用来检索此信息的命令?我正在使用FSF-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”
编辑添加'尺寸说明/预期的十六进制上限
编辑 …
Ada Information Clearinghouse声明如下:
使用编译指示
Inline确实有其缺点。它可以在主体上创建编译依赖项;也就是说,当规范使用 pragma 时Inline,在使用规范之前可能需要编译规范和相应的主体。
将 pragmaInline放入 body是否可以避免这个问题?
在Learning Ada的第 22.1 章中,尝试构建示例。
它期望安装 GNATprove。我使用的是 Ubuntu 18.04 LTS,但没有看到任何提供它的软件包。当我尝试查找主存储库时,我发现的只是Open Do中的内容,当我单击下载按钮时,它似乎是一个损坏的链接。Google 几乎没有提供有关 GNATprove 的信息,这有点令人担忧。
我是 Ada 新手,所以我真的不知道应该使用什么,所以如果 GNATprove 不正确,请告诉我。我通常也期望有一个免费的软件工具链——这是一个合理的期望还是我应该期望需要“专业”版本来了解 Ada/SPARK 的全部内容?