linux– 从静态库中删除不需要的符号

linux– 从静态库中删除不需要的符号,第1张

概述我有来自第三方的一组绝对庞大的.a文件.我有自己的库,只从这组库中调用5或6个函数.我想生成一个小得多的.a文件,其中包含我的代码及其(少量)依赖项在外部库中.具体来说: 是)我有的> external.hint foo(); int bar(); > libexternal.a0000000000000000 T foo() 000000000

我有来自第三方的一组绝对庞大的.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 – 从静态库中删除不需要的符号所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047927.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存