使用gprbuild构建静态独立库

时间:2016-10-14 14:40:08

标签: gcc ada gnat

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

我的gpr看起来像这样

python -m ipykernel install --user --name myenv --display-name "Python (myenv)"

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

select quotenumber, max(revision ) 
from quotenumberlogbob 
WHERE LEFT(`quotenumber`, 2) = '$year' 
group by quotenumber

我的问题是结果from flask_sqlalchemy import SQLAlchemy 没有导出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; 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进行验证。

我尝试了各种开关组合,但没有任何东西可以调用活页夹,除非我更改为adainitadafinal并使用objdump

1 个答案:

答案 0 :(得分:1)

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

for Library_Kind use "dynamic";
for Library_Interface use ("One_Of_Your_Units");
for Library_Standalone use "encapsulated";

(你必须有一个Library_Interface,但我不认为它必须包含所有导出C-visible符号的单位。)

不幸的是,正如您所指出的,这对静态库不起作用。