我正在尝试为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
我错过了它:如何制作那个符号?
答案 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