代码之家  ›  专栏  ›  技术社区  ›  D. Ataro

使用GNAT使用静态库编译

  •  1
  • D. Ataro  · 技术社区  · 6 年前

    了解Ada程序编译背后的过程(无需使用 gpr ),我决定手动编译我的一个项目。为了编译一个程序,我在每个 .adb 其中的文件(但不是手动):

    $ gcc -c src/<file>.adb -o obj/<file>.o

    编译所有文件并将其放入 obj 目录

    libapples.a ,内载包裹 Apples . 这个 苹果

    -I 开关;另一方面,如果我没有包含源代码,上面的命令会返回给我说:

    <file>.adb:<y>:<x>: file "apples.ads" not found
    gnatmake: "src/<file>.adb" compilation error

    我尝试使用标志将库包括在编译过程中 -L l (我相信这就是你在C中的表现;如果我错了,请随时纠正我)。在另一次尝试中,我将归档文件放在源目录中。

    1 回复  |  直到 6 年前
        1
  •  4
  •   flyx    6 年前

    apples.ads 有点像C中的头文件,您肯定需要它来编译文件。你应该使用 -I 苹果广告 位于。

    请注意,编译Ada源代码不仅会生成一个对象文件,还会生成一个Ada库信息( .ali -o 国旗,因为它可能会导致您的 .o 阿里先生 具有不同名称的文件。

    -c 告诉gcc只编译。在C等其他语言中,默认情况下gcc编译和链接;在Ada中,这个过程更加复杂。

    编译之后,您需要调用 gnatbind 主程序的文件。这将生成一个包,负责所有内容的正确初始化。为此,, 需要 阿里先生 Apples 包裹您可以指定 阿里先生 使用搜索目录 -aO .

    gnatlink 总的来说 文件将所有内容链接在一起。它自行确定需要哪些对象文件和库。它将向链接器附加必要的选项,包括对 libapples.a . 它还编译由生成的包 啃咬 .

    啃咬 在引擎盖下就可以了;您可能会编译由 啃咬 手动,然后调用链接器,如果您能找到正确的参数。