gpt4 book ai didi

autotools - 如何编译具有静态链接依赖项的自动工具项目?

转载 作者:行者123 更新时间:2023-12-02 23:54:08 26 4
gpt4 key购买 nike

我想使用一个开源库。由于我想将我的软件作为二进制包传播,我不希望该库对其他库有依赖关系,因此我需要静态链接依赖关系。

现在,由于该库是开源的并且没有提供二进制文件,因此我自己编译它。该库使用自动工具,我没有找到任何有关如何静态链接依赖项的有用文档。我所做的尝试是使用 --enable-static 调用配置脚本,但这显然只告诉配置编译库的静态版本 - 但我需要的是一个动态库,其中包含它所依赖的所有库。

因此,我需要一种方法来告诉配置静态链接依赖项,或者一种对构建的库进行后处理以包含所有依赖项的方法。谁能告诉我该怎么做?

哦,如果重要的话:我使用的是 64 位 Snow Leopard。

最佳答案

最近我自己也走上了这条路,不幸的是,我发现静态库实际上并不是这样工作的。

当您生成静态可执行二进制文件时,链接器会查看它需要的所有函数,然后查看提供的库列表并提取您需要的每个函数的代码。

当您生成静态库时,您没有进行任何链接,因此所有编译后的代码都会被压缩(实际上它使用 ar 但功能上它与 zip 相同)到.a 静态库。 (“a”代表“archive”。)因为没有链接阶段,所以没有任何东西可以检查库使用哪个函数调用。它只是有一堆“ Unresolved external 问题”,稍后会解决。

这意味着当链接二进制文件时,您需要为您需要的所有函数提供代码(库) - 您自己的代码使用的函数,以及您的所有库使用的函数需要

我完全明白为什么你想要生成一个包含所有依赖项的库,但是据我所知,它并不是那样工作的。这就是为什么有像 pkg-config 这样的程序,您可以使用它来通知您的(静态或动态)库的用户他们需要链接哪些依赖库才能使用您的库。

最后,请确保检查要链接的任何库的许可证。仅仅因为一个库是开源的,并不意味着您可以不必链接到它。如果它是 GPL 库,那么通过链接到它,您同意在 GPL 下发布您自己的源代码,但您可能不希望这样做。

关于autotools - 如何编译具有静态链接依赖项的自动工具项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2889498/

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