Gcc 使用gprbuild构建静态独立库

Gcc 使用gprbuild构建静态独立库,gcc,ada,gnat,Gcc,Ada,Gnat,我正在尝试使用gprbuild构建一个静态库。该库没有main(用C编写,并在后期链接),并且必须是自包含的,据我所知,gpr术语是“独立的”,这意味着在运行时,它不需要链接任何东西,包括运行时 我的探地雷达像这样 当我运行gprbuild时,我在日志中看到不包括对绑定器的调用: gnatmake-Pada_foo_lib.gpr--创建缺少的目录 gcc-4.9-c-I--gnatA/home/temp/src/ada_foo_pack.adb 为ada_foo_lib项目构建静态库 ar

我正在尝试使用gprbuild构建一个静态库。该库没有main(用C编写,并在后期链接),并且必须是自包含的,据我所知,gpr术语是“独立的”,这意味着在运行时,它不需要链接任何东西,包括运行时

我的探地雷达像这样

当我运行gprbuild时,我在日志中看到不包括对绑定器的调用:

gnatmake-Pada_foo_lib.gpr--创建缺少的目录
gcc-4.9-c-I--gnatA/home/temp/src/ada_foo_pack.adb
为ada_foo_lib项目构建静态库
ar cr/home/temp/lib/libada_foo_lib.a/home/temp/obj/ada_foo_pack.o
ranlib/home/temp/lib/libada_foo_lib.a
我的问题是,生成的
libada\u foo\u lib.a
没有导出
adainit
adafinal
。我尝试链接它,并使用
objdump
进行验证


我尝试了各种开关组合,但没有任何东西可以调用活页夹,除非我改为
Library\u Kind
dynamic
并使用
Library\u Standalone

如果您的库不需要是静态的,而只需要是自包含的(即,将Ada运行时的必要部分包含在其自身中),您可以说

for Library_Kind use "dynamic";
for Library_Interface use ("One_Of_Your_Units");
for Library_Standalone use "encapsulated";
(您必须有一个
库\ u接口
,但我认为它不必包括导出C可见符号的所有单元)


不幸的是,正如您所指出的,这不适用于静态库。

是否可以添加存根“main”来强制链接
adainit
adafinal
,但从不调用它?
for Library_Kind use "dynamic";
for Library_Interface use ("One_Of_Your_Units");
for Library_Standalone use "encapsulated";