使用导出的函数编译未引用的包

Compile unreferenced package with exported functions

在混合Ada 和C 的项目中,我定义并导出要在C 程序中调用的Ada 函数。编译链很复杂,我无法对其进行任何更改,但是当我编译项目时,编译器完全排除了包含导出函数并因此未被任何 Ada 代码调用的包。这意味着链接器无法完成其工作,因为它缺少外部函数。

例如这个简单的三文件项目:

Main.adb

with Ada.Text_IO;

procedure Main is
begin
   Ada.Text_IO.Put_Line ("Hello ada community");
end Main;

test.ads

package Test is

    procedure Hello
        with Export     => True,
             Convention => C,
             Link_Name  => "test_hello";

end Test;

test.adb

with Ada.Text_IO;

package body Test is

    procedure Hello is
    begin
        Ada.Text_IO.Put_Line ("Hello world");
    end Hello;

end Test;

当我编译我的项目时,包 Test 被编译器忽略了。是否有编译指示强制编译器导出符号并编译包?

找到了非常明显的解决方案。我只需要将包包含在 main.adb 文件中。