SFML静态与动态库加载,visual studio是如何指定这一点的?

q9yhzks0  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(166)

我目前正在尝试在Visual Studio中设置SFML。我一直在遵循这里的教程:http://www.sfml-dev.org/tutorials/2.4/start-vc.php
现在我已经指定了库的位置和我想使用的.lib。
然而,我对它声明前面的操作只是将项目设置为动态加载库的部分感到困惑。这让我很困惑。我刚才不是指定了.lib文件吗?lib文件不是静态库吗?为什么要将项目配置为在指定静态库文件后动态加载库?
此外,当我去运行演示项目。它指出,DLL的无法找到…
然后,教程继续说明,如果你想静态链接到库,你必须指定不同的.lib文件并定义一个预处理器宏。
所以我的问题是Visual Studio究竟如何决定您所指向的库是静态加载还是动态加载?看起来如果我想动态加载一个库,我必须指向包含dll的目录,而不是libs。
有什么帮助吗?

nnt7mjpx

nnt7mjpx1#

  • VStudio* 不能决定如何加载(或者更好:假设 * 使用 *)某个库。它在构建库时使用它(静态或动态)。使用 VStudio 构建库时,输出将(几乎)始终包含 .lib 文件。

检查[SO]: Errors when linking to protobuf 3 on MSVC 2013 (@CristiFati's answer)的第二个项目符号,它简要描述了两种库类型之间的差异。
有关动态链接库的扩展信息,请查看[MS.Learn]: Dynamic-Link Libraries.lib 文件由 VStudio 在构建应用程序时使用(更准确地说是在 link 时)。
现在,如果一切顺利,您的应用程序构建完成(您的项目输出目录中将有一个 .exe 文件)。
当运行(和调试)该可执行文件时,如果它使用动态库,则这些库 .dll 文件必须存在于[MS.Learn]: Dynamic-Link Library Search Order上指定的位置之一(为了简单起见,我建议将它们复制到与 .exe 文件相同的文件夹中-注意,它仅用于演示目的,不应该用于部署应用程序)。

htrmnn0y

htrmnn0y2#

库在构建时被定义为静态或动态,SFML网站提供了这两种版本(您可以在从源代码构建时指定所需的版本)。
运行应用程序时,它将在系统和自己的目录中查找SFML的动态库文件。
您可以在 PostBuild 项目设置中使用 xcopy 将所需的 *. dll * 复制到目标目录中。例如,这将把所有debug *. dll * 复制到带有 .exe 的目录中:

xcopy "$(SFML)\bin\*-d-2.dll" "$(TargetDir)" /Y /D

这个过程与发布版本的构建过程类似,但是您需要一个文件来指定要排除以 -d 结尾的 *. dll *

相关问题