boost库,使用动态库(dll)好呢,还是静态库(lib)好呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了boost库,使用动态库(dll)好呢,还是静态库(lib)好呢?相关的知识,希望对你有一定的参考价值。

初学boost,编译完成后发现boost\lib下既有lib文件也有dll文件,由此我有个疑问,使用boost库时,是用动态库好呢还是静态库好呢?请指教,多谢!

我建议静态库(windows下编译直接点几下就正好只生产静态库)

因为动态库dll很大,你运行的时候一般不想带着那些沉重的dll吧,即使指用到部分,要把用到的dll挑出来也有点恶心。还有就是你不想让别人感知你用了boost时,静态库也合适一些
参考技术A 静态库在编译的时候要用到

动态库在运行的时候要用到

两个库你必须都要用

编译的时候 要根据静态库(lib)去找动态库(dll)中相应导出函数的地址

何为用动态库和静态库的区别?

编译的时候 可以脱离dll编译完成

编译好了可以脱离lib运行!
就这样本回答被提问者和网友采纳

如何使用boost.python中的-fPIC编译静态库

默认情况下,libboostpython.a是在没有-fPIC的情况下编译的。但我必须创建一个python扩展,它是一个动态库,其中-fPIC链接到静态库。如何使用libboostpython.a中的-fPIC编译静态库(boost.python)?

答案

您可以使用几种选项:

  • 从源代码编译boost并将额外的编译器选项传递给bjam。例如。 bjam ... cxxflags='-fPIC'。这会将每个boost源文件编译为与位置无关的代码。
  • 以共享库的形式使用boost。在这种情况下,您可能希望将boost共享库与应用程序一起发布,以确保使用适当的boost版本。您可以将可执行文件与'-Wl,-rpath,$ORIGIN'标志链接,以便当动态链接器搜索可执行文件所需的共享库时,它会在可执行文件所在的目录中查找它们。有关man ld.so的更多详细信息,请参阅$ORIGIN
另一答案

请注意,如果您在首先需要清除目标后已经运行了bjam,那么通过应用-d + 2打印命令也很有帮助:

./bjam clean && 
./bjam -d+2 link=static cxxflags="-fPIC" install

以上是关于boost库,使用动态库(dll)好呢,还是静态库(lib)好呢?的主要内容,如果未能解决你的问题,请参考以下文章

静态库和动态库系列

关于动态库和静态库的问题。

静态链接库的动态 DLL

Visual studio那些破事。。。(生成静态库生成动态库引用静态库引用动态库)

windows中静态库lib和动态dll的区别及使用方法

动态链接库和静态链接库