Ada库初始化/细化和GPR指令:无法找到精化符号

时间:2017-06-28 16:57:21

标签: libraries ada symbols elaboration

我正在尝试为iOS制作一个Ada库。 但是,有必要手动执行Ada精化。

我知道编译器可以生成一个init符号,以后可以导入和使用它。但是,使用以下GPR定义时,不会生成它(SELECT * FROM orders a, customer b,salesman c where a.customer_id=b.customer_id and a.salesman_id=c.salesman_id; 命令不会列出它)。命名应为nm<libname>init对应于GPR指令<libname>中定义的值

GPR以下列方式定义(这个是windows / style -see DLL reference-,但在Mac上为iOS生成时也会出现问题):

Library_Name

我错过了它:如何制作那个符号?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。 我的GPR缺少这个简单的指令:

project adalib is
    for Languages use ("Ada");
    for Source_Dirs use (project'Project_Dir & "./src");
    for Library_Kind use "static"; --"static" on iOS will produce a .a file
    for Library_Name use project'Name; -- will produce "libadalib.a"
    for Library_Dir use project'Project_Dir & "./lib";
    for Library_Src_Dir use project'Project_Dir & "./includes";
    -- define your favorite compiler, builder, binder, linker options
end adalib;

使用上述指令,我可以通过 for Library_Interface use ("mypackage"); -- put whatever packages you want to expose, without .adb/.ads since we're talking about packages 命令找到adalibinit符号。 当我在我的ada代码中导入它时,我也可以使用它,请参阅:

nm

因此,完整的GPR应该是:

package body mypackage is
    procedure Init_My_Lib
    is
       -- I want to call elaboration;
       pragma import (C, ada_elaboration, "adalibinit");
    begin
       ada_elaboration;
       -- further code
    end Init_My_Lib;
-- rest of package