我有一组来自第三方的绝对庞大的.a文件。 我有我自己的库,从这套库调用5或6个函数。 我想生成一个更小的.a文件,其中包括我的代码和(less数)依赖关系在外部库中。
具体来说:
external.h
int foo(); int bar();
libexternal.a
0000000000000000 T foo() 0000000000000010 T bar()
mylibrary.c
#include "external.h" int foo_wrapper() { return foo(); }
mylibrary.h
int foo_wrapper();
我想创build一个文件libmylibrary.a
,它具有符号foo_wrapper
,它的依赖关系foo
,以及任何foo
内部调用,但不是bar
(实际上代表数以千计的函数)。 这样,人们可以包含我的库,而不必在libexternal.a
包含external.h
或链接。 我不愿意手动列出foo
因为实际上有一大堆function。
可以这样做吗?
我愿意列出我需要的符号。 所以例如,我foo_wrapper
在命令行上指定foo_wrapper
。 但是我也不能在命令行上指定foo
,以及它调用的任何函数。 我可以指定foo_wrapper
的原因是,它允许我编写一个名为callEverything()
的函数,它只是调用我想提供的所有函数,然后将该符号放在命令行中。
就像KevinDTimm所说:你可以使用“ar”编辑你的.a文件来提取其中的所有对象文件,并将必要的文件添加回.a文件。
图书馆的作者可以把他的所有功能放在一个.c文件或多个文件中。 每个.c文件产生一个目标文件。
我认为你没有机会只拿到一部分的对象文件,你需要的全部或没有。 在链接时,将.obj文件再次分离到它的函数中为时已晚:有太多直接嵌入的地址和函数调用。
另外你的最终的程序将包含被“存档”到你的链接.a静态库中的obj文件的一个子集。 但是每个单个的obj文件要么完全不能运行,要么完全不运行!
你需要的是ar
,* nix的存档程序;
为了您的所有需求,请看这里 (或者只输入man ar
)
简短的回答,你正在寻找“T”选项来查看,“X”选项从库中提取对象和“R”选项选项来添加它们。
请注意,可能(将)会有很多相互依赖性,需要相当长的一段时间才能确定。