linux – 从静态库中删除不需要的符号
我有来自第三方的一组绝对庞大的.a文件.我有自己的库,只从这组库中调用5或6个函数.我想生成一个小得多的.a文件,其中包含我的代码及其(少量)依赖项在外部库中. 具体来说: ?是)我有的 > external.h
> libexternal.a
> mylibrary.c
> mylibrary.h
?我想要的是 我想创建一个文件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中,要么根本不在! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |