首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gprbuild构建静态独立库

使用gprbuild构建静态独立库
EN

Stack Overflow用户
提问于 2016-10-14 22:40:08
回答 1查看 463关注 0票数 1

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

我的gpr是这样的

代码语言:javascript
复制
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时,我在日志中看到没有包含对绑定器的调用:

代码语言:javascript
复制
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验证了它。

我尝试了所有类型的开关组合,但都没有调用绑定器,除非我将Library_Kind更改为dynamic并使用Library_Standalone

EN

回答 1

Stack Overflow用户

发布于 2016-10-15 05:00:54

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

代码语言:javascript
复制
for Library_Kind use "dynamic";
for Library_Interface use ("One_Of_Your_Units");
for Library_Standalone use "encapsulated";

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40045891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档