E_G*_*E_G 6 linux static-libraries
我有来自第三方的一组绝对庞大的.a文件.我有自己的库,只从这组库中调用5或6个函数.我想生成一个小得多的.a文件,其中包含我的代码及其(少量)依赖项在外部库中.
具体来说:
external.h
int foo();
int bar();
Run Code Online (Sandbox Code Playgroud)libexternal.a
0000000000000000 T foo()
0000000000000010 T bar()
Run Code Online (Sandbox Code Playgroud)mylibrary.c
#include "external.h"
int foo_wrapper() { return foo(); }
Run Code Online (Sandbox Code Playgroud)mylibrary.h
int foo_wrapper();
Run Code Online (Sandbox Code Playgroud)我想创建一个文件libmylibrary.a,其中包含符号foo_wrapper,依赖关系foo以及foo内部调用的任何内容,但不是bar(实际上代表数千个函数).通过这种方式,人们可以在不必包含external.h或链接的情况下包含我的库libexternal.a.我不愿意手动列出,foo因为实际上有很多功能.
可以吗?
我愿意列出我需要的符号.所以例如,我可以foo_wrapper在命令行上指定.但是我也不能foo在命令行上指定它以及它调用的任何函数.我foo_wrapper可以指定的原因是它允许我编写一个callEverything()调用的函数,只调用我想要的所有函数,然后将该符号放在命令行上.
就像 KevinDTimm 所说:您可以使用“ar”编辑 .a 文件,以提取其中的所有目标文件并将必要的文件添加回 .a 存档中。
该库的作者可以将其所有函数放入单个 .c 文件或多个文件中。每个 .c 文件都会生成一个目标文件。
我认为你没有机会只获取目标文件的一部分,你需要全部或什么都不需要。在链接时,将 .obj 文件再次分离到其函数中为时已晚:有太多直接嵌入的地址和函数调用。
此外,您的最终程序将包含“存档”到链接的 .a 静态库中的 obj 文件的子集。但是每个 obj 文件要么完全在您的最终可执行文件中,要么根本不存在!
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |