gpt4 book ai didi

c++ - 将我的代码打包为库时应该创建 .a 还是 .so?

转载 作者:太空狗 更新时间:2023-10-29 23:37:50 24 4
gpt4 key购买 nike

我有一个软件库,我曾经创建 .a 文件,以便人们可以安装它们并链接到它们:g++ foo.o -L/path/to -llibrary

但现在我经常遇到只有 .so 文件可用(而不是 .a)的第三方库,而你只需链接到它们而无需 -l 开关,例如g++ foo.o/path/to/library.so

这些解决方案之间有什么区别?我应该更愿意为我的库的用户创建 .so 文件吗?

最佳答案

通常,libfoo.a 是静态库,libfoo.so 是共享库。您可以对静态或共享使用相同的 -L/-l 链接器选项。或者您可以使用 static 或 shared 命名 lib 的完整路径。通常,库是静态构建的和共享的,以便为应用程序开发人员提供他们想要的选择。

静态库所需的所有代码都是最终可执行文件的一部分。这显然使它变得更大,但这也意味着它是独立的。编译完成后,您可以在没有库的情况下运行您的应用。

来自共享库的代码不是可执行文件的一部分。只有一些 Hook 可以让可执行文件知道它需要的库的名称。为了运行您的应用,共享库必须存在于库搜索路径中(例如 $LD_LIBRARY_PATH)。

如果您有两个共享相同代码的应用程序,它们可以分别链接到一个共享库以减小二进制文件的大小。如果您想升级应用程序的某些部分而不重建整个应用程序,共享库也很适合。

关于c++ - 将我的代码打包为库时应该创建 .a 还是 .so?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4228436/

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