静态和动态库

时间:2011-05-18 23:08:19

标签: c++ dynamic static libraries sfml

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

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

在此先感谢,我对图书馆,静态或动态不太熟悉。如果它有任何区别,我正在使用Ubuntu linux,我正在使用mingw32进行交叉编译。

2 个答案:

答案 0 :(得分:6)

使用SFML,您可以静态链接到他们的库,如上面的评论中所述。这种方式将其全部编译成可执行文件,您不需要将其与DLL一起发送。如何完成取决于您使用的是SFML 1.6还是2.0。

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

答案 1 :(得分:2)

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