【发布时间】:2017-02-24 01:07:32
【问题描述】:
我正在尝试使用 gprbuild 构建一个静态库。该库没有主库(用 C 语言编写并在后期链接),据我所知,它必须是自包含的 gpr 术语是“独立的”,这意味着不需要链接在运行时包括运行时在内的任何内容。
我的 gpr 看起来像这样
project Ada_Foo_Lib is
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Library_Dir use "lib";
for Library_Name use "ada_foo_lib";
for Library_Kind use "static";
package Binder is
for Default_Switches("Ada") use ("-n");
for Required_Switches ("Ada") use ("-n");
end Binder;
end Ada_Foo_Lib;
当我运行 gprbuild 时,我在日志中看到不包含对 binder 的调用:
gnatmake -Pada_foo_lib.gpr --create-missing-dirs
gcc-4.9 -c -I- -gnatA /home/temp/src/ada_foo_pack.adb
building static library for project 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_foo_lib.a 没有导出adainit 和adafinal。我尝试链接它并使用objdump 进行了验证。
我尝试了各种开关组合但没有任何东西可以调用活页夹,除非我将Library_Kind更改为dynamic并使用Library_Standalone:
【问题讨论】:
-
是否可以添加一个存根“main”来强制链接
adainit和adafinal,但永远不要调用它?