Ada 库 initialisation/elaboration 和 GPR 指令:找不到详细说明符号
Ada library initialisation/elaboration and GPR directives : can't find elaboration symbol
我正在尝试为 iOS 生成一个 Ada 库。
但是需要手动进行Ada细化。
我知道编译器可以生成一个初始化符号,以后可以导入和使用。但是,对于以下 GPR 定义,它不会产生(nm
命令不会列出它)。命名应该是 <libname>init
,<libname>
对应于 GPR 指令中定义的值 Library_Name
GPR 按以下方式定义(这个是 windows/style - 请参阅 DLL 参考 -,但在 Mac 上为 iOS 生成时也会出现问题:
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;
我想念它:如何生成该符号?
我找到了解决办法。
我的 GPR 缺少这个简单的指令:
for Library_Interface use ("mypackage"); -- put whatever packages you want to expose, without .adb/.ads since we're talking about packages
使用上面的指令,我可以通过 nm
命令找到 adalibinit
符号。
当我在我的ada代码中导入它时,我也可以使用它,参见:
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
所以,完整的 GPR 应该是:
project adalib is
for Languages use ("Ada");
for Source_Dirs use (project'Project_Dir & "./src");
for Library_Kind use "static"; -- will produce a .a file
for Library_Name use project'Name; -- will produce "libadalib.a"
for Library_Interface use ("mypackage"); -- <=== THIS IS HERE
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;
我正在尝试为 iOS 生成一个 Ada 库。 但是需要手动进行Ada细化。
我知道编译器可以生成一个初始化符号,以后可以导入和使用。但是,对于以下 GPR 定义,它不会产生(nm
命令不会列出它)。命名应该是 <libname>init
,<libname>
对应于 GPR 指令中定义的值 Library_Name
GPR 按以下方式定义(这个是 windows/style - 请参阅 DLL 参考 -,但在 Mac 上为 iOS 生成时也会出现问题:
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;
我想念它:如何生成该符号?
我找到了解决办法。 我的 GPR 缺少这个简单的指令:
for Library_Interface use ("mypackage"); -- put whatever packages you want to expose, without .adb/.ads since we're talking about packages
使用上面的指令,我可以通过 nm
命令找到 adalibinit
符号。
当我在我的ada代码中导入它时,我也可以使用它,参见:
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
所以,完整的 GPR 应该是:
project adalib is
for Languages use ("Ada");
for Source_Dirs use (project'Project_Dir & "./src");
for Library_Kind use "static"; -- will produce a .a file
for Library_Name use project'Name; -- will produce "libadalib.a"
for Library_Interface use ("mypackage"); -- <=== THIS IS HERE
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;