静态库与动态库

3
我正在使用SFML,在Code::Blocks和mingw32中构建应用程序。我已经将SFML库(sfml-whatever.a)添加到我的项目中,并且它可以很好地运行。
但是,据我所知,静态库会“编译”到可执行文件中。如果是这样的话,为什么我必须把所有的SFML DLL放在可执行文件旁边,才能在Code::Blocks之外的任何地方运行它呢?如果我从Code::Blocks中以某种方式“动态链接”DLL到我的项目中(我不知道如何做),那么我是否仍然需要将所有的.a文件与可执行文件一起提供才能使其正常运行?
提前感谢您的帮助,我对库、静态或动态并不十分熟悉。如果有任何区别,我正在Ubuntu Linux上工作,并且我正在使用mingw32进行交叉编译。
2个回答

6
使用SFML,您可以像上面的评论中提到的那样静态链接到它们的库。这样,所有内容都编译到可执行文件中,您就不需要将其与DLL一起发布。如何完成取决于您使用的是SFML 1.6还是2.0。
1.6不需要任何预处理器定义,但2.0需要您为编译器构建一个解决方案/ makefile,然后在您的预处理器定义中 #define SFML_STATIC

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

谢谢您澄清这一点。所以,如果我理解正确的话,我仍然需要链接到静态库,但要将DLL与可执行文件放在一起? - Keelx
@Keelx:是的,除非有静态链接的选项。 - Benjamin Lindley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接