gpt4 book ai didi

linux - 从静态库中剥离不需要的符号

转载 作者:IT王子 更新时间:2023-10-29 00:56:45 24 4
gpt4 key购买 nike

我有一组来自第三方的绝对庞大的 .a 文件。我有自己的库,它只调用这组库中的 5 或 6 个函数。我想生成一个小得多的 .a 文件,其中包含我的代码及其在外部库中的(少量)依赖项。

具体来说:

我有什么

  1. 外部.h

    int foo();
    int bar();
  2. libexternal.a

    0000000000000000 T foo()
    0000000000000010 T bar()
  3. 我的图书馆.c

    #include "external.h"
    int foo_wrapper() { return foo(); }
  4. mylibrary.h

    int foo_wrapper();

我想要什么

我想创建一个文件 libmylibrary.a,其中包含 foo_wrapper 的符号、它的依赖项 foo 以及任何 foo 在内部调用,但不是 bar(它实际上代表了数千个函数)。这样,人们就可以包含我的库,而不必包含 external.hlibexternal.a 中的链接。我不愿意手动列出 foo 因为实际上有一大堆功能。

可以吗?

更多细节

我愿意列出我需要的符号。因此,例如,我可以在命令行上指定 foo_wrapper。但是我还不能在命令行上指定 foo 以及它调用的任何函数。我可以指定 foo_wrapper 的原因是它允许我编写一个名为 callEverything() 的函数,它只调用我想提供的所有函数,然后将该符号放在命令行上。

最佳答案

正如 KevinDTimm 所说:您可以使用“ar”编辑您的 .a 文件以提取其中的所有目标文件并将必要的文件添加回 .a 存档。

库的作者可以将他的所有函数放入单个 .c 文件或多个文件中。每个 .c 文件生成一个目标文件。

我认为你没有机会只获取目标文件的一部分,你需要全部或什么都不需要。在链接时将 .obj 文件再次分离到它的函数中为时已晚:直接嵌入的地址和函数调用太多。

此外,您的最终程序将包含“存档”到链接的 .a 静态库中的 obj 文件的子集。但是每个单独的 obj 文件要么完全在您的最终可执行文件中,要么根本不存在!

关于linux - 从静态库中剥离不需要的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13942469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com