- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用这个编译指示从 C: 导入 getpid
function Get_Process_ID return Process_ID;
pragma Import (C, Get_Process_ID, "getpid");
我预计这会更难一些。要在 C 中使用 getpid
,我需要明确包含头文件 unistd.h;在上面的 pragma 中,我没有引用头文件。 GNAT 如何确切知道在哪里可以找到 getpid
?
编辑:
这是一个最小的工作示例:
with Ada.Text_IO;
procedure Main is
subtype Process_ID is Integer;
function Get_Process_ID return Process_ID;
pragma Import (C, Get_Process_ID, "getpid");
begin
Ada.Text_IO.Put_Line (Process_ID'Image (Get_Process_ID));
end Main;
保存为 main.adb,使用以下命令编译:
gnat make main.adb
我正在使用来自 Ubuntu 18.04 软件存储库的 gnat
包的全新安装,没有配置或项目文件。 GNAT 版本为 7.5.0。
最佳答案
AdaCore 的文档中有详细的解释 GNAT Configurable Runtime Facility .默认情况下,使用 GNAT 编译的程序链接到 libc.a 和其他几个:
When an Ada program is built, the object code that makes up the final executable may come from the following entities (in addition to the user code itself):
- GNAT Pro run-time library
- C library
- Math library
- Internal GCC library
- Startup code
The GNAT and GCC drivers automatically link all these libraries and objects with the final executable, statically or dynamically depending on the target and on some compilation options. The
-nostdlib
and-nodefaultlibs
options may be used to control this automatic behavior.
使用 -nostdlib
标志编译我的最小工作示例失败并出现以下错误(以及许多其他错误):
...
main.adb:(.text+0x20): undefined reference to `getpid'
...
libc.a 中提供的函数可能因平台而异。在 Ubuntu 上,您可以使用 locate
找到 libc.a,并使用 nm
检查定义了哪些符号。
关于ada - 在 Ada 中导入编译指示 : How does GNAT know where to look?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61178941/
我是一名优秀的程序员,十分优秀!