静态库可移植性

5

短问题。如果我已经写了一个C++的静态库,并在Ubuntu上使用G++编译它,那么我可以安全地假设它将能够在其他Linux发行版上使用G++进行链接吗?


2
不可以。你可能需要为特定的目标系统和CPU进行交叉编译。 - πάντα ῥεῖ
交叉编译它?你能详细解释一下吗? - Akasata Akasata
这个问题太广泛了,无法在此详细解释。请尝试谷歌一下应用二进制接口和交叉编译。 - πάντα ῥεῖ
你只能假设使用相同版本的 gcc 和 C++ 共享库来安全地链接它,并且在相同的 CPU 家族上。虽然 gcclibstdc++ 有一些向后兼容的 ABI 保证,但我不会依赖它,并且只会假设它与相同版本的 gcc 兼容。 - Sam Varshavchik
简短回答:不一定。这取决于你的库所做的事情、它所依赖的其他库以及它们是否已安装在其他系统上、它是否依赖于特定的硬件(32位、64位等)、等等。 - Peter
1个回答

4

Linux系统中的二进制文件,无论是可执行文件、静态库还是共享库,都不是任意可互换的。

这就是为什么几乎所有软件包都以源代码的形式分发,而你的软件包管理系统则负责如何配置和编译这些源代码。

尽管如此,商业软件应该在不透露实际源代码的情况下分发,通常由供应商为各种Linux发行版进行(跨)编译。


正确的方法应该是这样的:如果我想创建一个开源库,我会提供源代码;如果我想创建一个商业库,我会编译多个目标。这样对吗? - Akasata Akasata
2
@AkasataAkasata 对于开源项目,您可以考虑提供一个 _automake 包_,对于商业项目,您需要为您考虑支持的各种发行版编译并交付二进制文件。 - πάντα ῥεῖ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接