我有来自第三方的一组绝对庞大的.a文件.我有自己的库,只从这组库中调用5或6个函数.我想生成一个小得多的.a文件,其中包含我的代码及其(少量)依赖项在外部库中.
具体来说:
是)我有的
> 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();
我想要的是
我想创建一个文件libmylibrary.a,它包含foo_wrapper的符号,它的依赖关系foo,以及foo内部调用的任何东西,但不是bar(实际上代表数千个函数).这样,人们可以包含我的库,而不必在libexternal.a中包含external.h或link.我不愿意手动列出foo,因为实际上有很多功能.
可以吗?
更多详情
我愿意列出我需要的符号.所以例如,我可以在命令行上指定foo_wrapper.但是我也不能在命令行上指定foo,以及它调用的任何函数.我可以指定foo_wrapper的原因是它允许我编写一个名为calLeverything()的函数,该函数只调用我想要提供的所有函数,然后将该符号放在命令行上.
最佳答案像KevinDTimm所说:你可以使用“ar”编辑.a文件,以提取其中的所有目标文件,并将必要的文件添加回.a存档.该库的作者可以将他的所有功能放在单个.c文件或多个文件中.每个.c文件都会生成一个目标文件.
我认为你没有机会只占用目标文件的一部分,你需要全部或全部.在链接时,将.obj文件再次分离到它的函数中为时已晚:有太多直接嵌入的地址和函数调用.
此外,您的最终程序将包含obj文件的一个子集,这些文件被“存档”到您链接的.a静态库中.但是每个单独的obj文件要么完全在你的最终exectuable中,要么根本不在!
总结以上是内存溢出为你收集整理的linux – 从静态库中删除不需要的符号全部内容,希望文章能够帮你解决linux – 从静态库中删除不需要的符号所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)