【问题标题】:Static and Dynamic Libraries静态和动态库
【发布时间】:2011-08-28 11:10:32
【问题描述】:

我正在使用 SFML,并且正在 Code::Blocks 和 mingw32 中构建应用程序。我已将 SFML 库 (sfml-whatever.a) 添加到我的项目中,并且运行良好。

但是 iIrc,静态库被“编译”成可执行文件。如果是这样,那么为什么我必须将所有 SFML DLL 放在可执行文件旁边,以便它在 Code::Blocks 之外的任何地方运行?如果我要以某种方式将 Code::Blocks 中的 DLL 以某种方式“动态链接”到我的项目(我不知道该怎么做),我是否仍然需要将我的可执行文件与所有 .a 文件一起发送给它正常运行?

提前致谢,我对静态或动态库不太熟悉。如果有什么不同的话,我正在使用 Ubuntu linux,并且我正在使用 mingw32 进行交叉编译。

【问题讨论】:

    标签: c++ dynamic static libraries sfml


    【解决方案1】:

    使用 SFML,您可以静态链接到他们在上面的 cmets 中提到的库。这样它就全部编译到可执行文件中,您不需要将它与 DLL 一起提供。如何完成取决于您使用的是 SFML 1.6 还是 2.0。

    1.6 不需要任何预处理器定义,但 2.0 要求您使用 cmake 为编译器构建解决方案/makefile,然后在预处理器定义中使用 #define SFML_STATIC

    【讨论】:

      【解决方案2】:

      在这种情况下,静态库只包含与动态库接口的代码,而不是实际的库代码。

      【讨论】:

      • 感谢您解决这个问题。所以,如果我理解正确的话,我仍然需要链接到静态库,但将 DLL 保留在可执行文件旁边?
      • @Keelx:是的,除非有静态链接选项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2018-01-23
      • 2015-03-06
      • 2011-11-05
      相关资源
      最近更新 更多