我正在从boost源代码构建“boost”库,我有两个选择:将其构建为“静态”或将其构建为“共享”(例如动态)。 哪个更好主意?
我更喜欢动态(共享)链接但是当我尝试构建boost共享库时(在Ubuntu Linux上),我收到了很多错误或警告(为什么在编译时总会出现错误,警告,注释和其他内容,grrrrrrrr) ,所以我不知道它是否编好了?
感谢。
答案 0 :(得分:7)
更好是主观的。共享减少了大小,存在依赖性风险。静态解决了依赖性问题,但增加了大小。
出于您的目的,我认为构建它可以让您更快地编写代码是更好的解决方案。
答案 1 :(得分:4)
您几乎总是希望在静态库上使用共享库。使用共享库的一个关键优势是,如果库已更新,您可以使用较新版本替换共享库(假设二进制兼容性),并在不重新编译应用程序的情况下获得改进实现的好处。此外,如果多个程序正在使用共享库,则使用共享库可以节省空间。
至于依赖项问题,可以链接特定版本的共享库,或者将您的共享库放在特定于您的程序的特殊位置 - 这不会为您节省空间,但是它确实为您提供了与共享库相关的灵活性 - 因此,这不应成为在共享库上选择静态库的理由。实际上,我很难在典型的台式机,笔记本电脑或服务器机器上提出单个实例,其中使用静态库比使用共享库更好。
P.S。如果您尝试在Ubuntu Linux上安装Boost,只需运行“sudo apt-get install libboost1.37-dev”即可。您可能会收到错误,因为您没有安装所有Boost的依赖项。当您使用Ubuntu的apt-get软件包管理器进行安装时,会自动下载并安装这些软件。此外,通常最好使用OSs软件包管理器来安装软件包,而不是从源代码构建。例如,使用软件包系统的Boost版本将使您的软件更有可能在使用软件包管理器Boost版本的其他Ubuntu Linux部署中顺利运行。
P.P.S。 Boost使用了C ++的一些非常高级的功能。它有点推动C ++达到极限。在编译Boost时看到警告并不罕见。事实上,我已经在各种操作系统上构建了很多次Boost,我不记得没有警告的时候。
答案 2 :(得分:2)
当您不需要将组件动态加载到程序中时,将使用静态库。它编译成exe。
共享库在运行时加载,通常用于插件或扩展
Imo一个静态库在这里更好,因为你可能会在程序的启动时加载boost共享库
为什么你更喜欢共享库?
答案 3 :(得分:2)
在Linux上使用Boost C ++库的推荐方法是通过共享链接。在已经配置用于开发的Ubuntu Linux机器上,您根本不应该遇到任何错误。预计会出现编译警告 - 对于各种心态,技术和时间限制问题,都会产生一些问题。由于常规发布测试涵盖Ubuntu,我不担心创建库的功能 - 如果有.so,它应该可以工作。