问题标签 [gnat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
353 浏览

sockets - GNAT.Sockets 获取 MAC 地址

有没有办法通过 GNAT.Sockets 获取 MAC 地址?

我已经多次阅读 .ads 文件,但没有看到任何看起来会产生 MAC 地址的内容。

广告在这里

0 投票
2 回答
404 浏览

ubuntu - 从 GPS 链接到 Ubuntu .a 模块库?

我在 Ubuntu 系统上有一个 GNAT Programming Studio (GPS)/GNAT 项目。该项目的 Ada 内容编译得很好;但是,我需要绑定并链接到外部“.a”库,其中包含由 Ada 软件导入的 (C++) 例程 pragma。每次尝试时,我都会收到消息“库项目不能指定 main”。

我不认为我的项目是“图书馆项目”——我只想链接到图书馆。为什么这么难?不重建世界有可能吗?

警告:我不是Linux hack,所以请举例说明清楚。谢谢 :-)

0 投票
1 回答
495 浏览

ada - Gnat 创建没有控制台的进程

我需要一个在后台静默运行的应用程序,但仍与当前用户的桌面交互,而不是服务。

我希望应用程序在不产生标准输出控制台的情况下启动。

在 C 中,似乎是在 Kernel32.dll 中使用 FreeConsole 完成的,所以我导入了该函数:

这只会将进程与控制台分离,不会删除控制台。在此处找到有关此行为的详细信息

所以我试图跟踪窗口的句柄,然后 CloseHandle() 它。

这也没有任何作用。我敢打赌 Get_Console_Handle 返回的句柄不正确。

我的问题是,是否有不创建控制台窗口的 Gnat 命令行选项,或关闭控制台窗口的方法?

0 投票
1 回答
499 浏览

linux - Ada 编译器因“此系统上未安装 Ada 编译器”而崩溃。降级gcc版本后

我将我的 gcc 版本 4.6.3 降级为 4.3.4 但 ada 版本没有更改 gnat-4.6.3 所以我得到了错误

此系统上未安装 Ada 编译器。

如何将我的 ada 设置为 gnat 4.3.4?

0 投票
2 回答
7332 浏览

makefile - 尽管安装了 gfortran,但找不到 -lgfortran

可能重复:
未找到 lgfortran

我必须承认我的问题可以被认为与lgfortran not found非常相似,但由于我是 Linux 的新手,我需要更多帮助,但我在上面的帖子中找不到我想要的东西。

我安装了一个新的 linux mint Debian 版本,我正在尝试为 Ada 制作一个 lapack 绑定。

如果我检查 gfortran,我会得到:

如果我locate libgfortran,我得到:

当我运行 amakefile时,我得到:

我正在使用的makefile在这里:

http://12000.org/my_notes/ada/lapack_and_blas/lapack_interf_makefile.txt

由于我对 Linux 很陌生,如果我能获得有关如何解决此问题的详细说明,我将不胜感激。

谢谢

0 投票
1 回答
865 浏览

ada - 操作只能以一种类型进行调度

我有一个记录,想要一些访问器功能。

这是 GNAT 给我的:

这个错误对于 Ada 新手来说有点神秘,我希望能得到一些解释我做错了什么以及如何正确地做。

0 投票
0 回答
189 浏览

eclipse - GNATbench Ada 在 Eclipse 中使用远程系统资源管理器

我使用 eclipse 的 GNATbench Ada 插件来让 eclipse Ada 在 Windows 上感知。这适用于本地文件,但我的主要开发是在远程 Unix 机器上。我成功地使用 Eclipse 的远程系统资源管理器插件从 Windows 远程编辑 Unix 机器上的 C 文件,但无法为 Ada 工作。

GNATbench 插件似乎无法与远程系统资源管理器 (RSE) 插件一起正常工作。可能是 GNATbench 中的一个错误,它直接使用完整路径寻址文件,而不是从 eclipse 项目的角度解决它们。

有人试过这个吗?

0 投票
1 回答
394 浏览

generics - Ada 泛型和汇编代码生成

我想知道是否有办法从 Ada 泛型中获得更小/更高效的汇编代码。

例如,我编写了一个小的虚拟 Ada 程序 (main.adb) 来显示一个通用过程并实例化它 6 次:

为了编译,gnatmake main.adb当我查看结果时,objdump -d -S main > main.dump我看到每个通用实例都有 6 个部分:

... <剪辑>

... < 剪辑 > 等等...

每个都有非常相似的代码,所以我怀疑正在发生的是 gnatmakeThing_Gen用作模板并扩展每个实例化的代码,而不是使用某些参数重用代码。

所以问题是,如何让 gnatmake 重用泛型的代码,而不是为每个实例复制/粘贴?

我本来希望实例化采用以下形式:

  1. 设置 Baa / 应用通用参数(我知道XThis_Value & 程序BobThis_Address
  2. 调用Thing_Gen(然后使用设置来产生预期的结果)

导致Thing_Gen代码重用。但情况似乎并非如此。也欢迎解释为什么我是汇编程序和编译器问题的菜鸟!

注意:Sparc 和 Intel 的结果相同!(英特尔 gnatmake 版本 4.4.3)

0 投票
1 回答
1434 浏览

ada - 在 Linux 中运行 GNAT GPS 的可执行文件的名称是什么?

它刚刚在我的机器上安装了这个。我正在尝试查找运行 GNAT GPS 的可执行文件的名称。

谢谢。

0 投票
1 回答
315 浏览

c++ - 在 Ada95 中跨共享库/对象共享数据

好的,这会很长,我提前为此道歉。=)

我需要指出的是,这里使用的代码很遗憾与实际生产代码不完全匹配,出于保密原因,而是为了说明问题、一些经过测试的解决方案以及方便讨论而构建的。在概念层面上,它已经足够相似了,尽管一切都被剥离和简化了。数据保护虽然在现实中是必要的,但在这里却被忽略了。

问题

我们有一个共享对象“data_provider”,它是从 Ada 代码生成的。Data_provider 有一个内部数据记录,我们需要从许多共享对象“data_user”1 到 n 访问它,这些共享对象也是从(不同的)Ada 代码生成的。这些共享包含类型定义的 Ada 规范,但本质上,出于(有效;估计和基准)性能原因,数据需要跨共享对象边界共享,最好没有不必要的复制。

这些共享对象在编译时或运行时通过 libdl 链接到 c++ 主程序(此处称为“包装器”)(这还不是一成不变的),因此解决方案需要以任何一种方式工作。我应该补充一点,如果数据也可以从 c++ 端检查,这将是有益的,即使我们在那里没有完整的类型 def 可用。

代码可能需要通过 Ada95 编译,尽管 -05可能会在紧要关头工作。-12 不在讨论范围内。平台是 RHEL5 上的 GNAT。

我试过的东西

目前,一个“可行”的解决方案是简单地获取数据记录的地址,将其传递给包装器,将其传递给 data_user 对象,在那里转换地址->访问,并将指针数据复制到内部对象中。这是下面示例代码中实现的方法。不过,额外的副本可能是性能方面的问题。

另一种“有效”的测试方法是简单地让 data_provider 导出变量,而 data_users 导入相同的变量,但这要求它们都在编译时链接,并且它还全局公开数据,这让我感觉比较脏,更别提脆了。

我相信for data'address use addr条款需要在制定时知道地址,因此不起作用..?

其他一些事情已经尝试并被丢弃,但我现在将它们从桌面上搁置一旁。

我希望,结合下面的代码足以得到一些建议;我全是耳朵。如果有什么需要澄清的,请询问。=)

实际上,我宁愿希望我只是愚蠢并在这里遗漏了一些明显的东西。而且我确实意识到这整个混乱并不完全符合良好的编码实践,在 Ada 或其他方面,但我仍然有点坚持它。

包装器.cpp

data_types.ads

data_provider.ads

data_provider.adb

data_user.ads

数据用户.adb

TLDR

用 Ada 编写并从 C++ 外部调用的多个共享库需要访问存储在 Ada 记录中的相同数据,最好不进行复制。我怎么做?