【问题标题】:-fdump-ada-spec: "FILE" not declared-fdump-ada-spec:未声明“文件”
【发布时间】:2020-04-09 13:08:45
【问题描述】:

交叉发布,comp.lang.ada 上没有答案。

我正在尝试为 GSL(Gnu 科学图书馆)odeiv2 包(常微分方程)生成 Ada 绑定。所以我做了以下两个步骤:

  1. 进入一个空目录“src”并执行

    g++ -c -fdump-ada-spec -C /usr/include/gsl/gsl_odeiv2.h

  2. 转到一个空目录“obj”并执行

    gcc -c -gnat05 ../src/*.ads

不幸的是,gsl_odeiv2.h 包含 stdio.h,这会导致一系列错误,例如

stdio_h.ads:117:69: "FILE" not declared in "x86_64_linux_gnu_bits_types_FILE_h"

奇怪的是,FILE 声明的,我在/usr/include/x86_64-linux-gnu/bits/types/FILE.h中找到它,它包含在stdio.h中。

我想我的 odeiv2 应用程序甚至不需要 FILE。那么有没有人提示如何摆脱这个错误?

【问题讨论】:

  • -fdump-ada-spec 必须以某种方式处理 C 包含文件的混乱,它通过为您请求的头文件及其包含的任何内容的传递闭包生成绑定来做到这一点。还有-fdump-ada-spec-slim(或-fdump-ada-slim-spec,我忘了)它只绑定您要求的特定标头。我倾向于使用它,并明确添加我需要修复缺少的绑定的任何其他标题。
  • 谢谢布赖恩,看起来很有希望。还没到最后,但在路上。谢谢。

标签: ada


【解决方案1】:

The top-secret GNAT documentation says,

GNAT 包含一个用于 C 和 C++ 头文件的绑定生成器,旨在完成从 C 或 C++ 头文件生成 Ada 规范的 95% 的繁琐工作。

请注意,此功能并非旨在生成 100% 正确的 Ada 规范,并且在某些情况下需要手动调整,尽管它通常可以在实践中开箱即用。

因此,如果生成的绑定不能像生成的那样工作,您应该预期必须对它们进行手动调整。

【讨论】:

  • 是的,我期待自己的作品。我没想到的是 C 开发人员对像 FILE 这样的“不透明”类型有多么雄心勃勃。而且我不是那个 C 专家。尽管如此,按照布赖恩的提示(见上文)似乎是最有希望的方法。
【解决方案2】:

用其他的C文件又出现了这个问题,不过这次我在网上找到了解决办法。来自 Interfaces.C_Streams:

  subtype FILEs is System.Address;
  -- Corresponds to the C type FILE*

【讨论】:

    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多