SFML 静态与动态库加载。 visual studio 是如何指定的?
SFML static vs dynamic library loading. How does visual studio specify this?
我目前正在尝试在 Visual Studio 中安装 SFML。我一直在关注这里的教程:http://www.sfml-dev.org/tutorials/2.4/start-vc.php
我已经指定了库位置和我想使用的 .lib。
但是,我对之前的操作只是设置项目以动态加载库的部分感到困惑。这让我很困惑。我不只是指定了 .lib 文件吗? .lib 文件不是静态库吗?为什么项目要在指定静态lib文件后配置为动态加载一个库?
此外,当我转到运行演示项目时。它指出找不到 dll...
教程接着说明,如果您想静态 link 库,您必须指定不同的 .lib 文件并定义预处理器宏。
所以我的问题是:Visual Studio 究竟是如何决定您指向的库是静态加载还是动态加载的?似乎如果我想动态加载一个库,我将不得不指向包含 dll 的目录,而不是 libs。
有什么帮助吗?
VStudio 无法决定如何加载(或更好:假设 使用)某个库。它在构建库时使用它(静态或动态)。当使用 VStudio 构建库时,输出将(几乎)总是包含一个 .lib 文件。
检查 [SO] 的第 2nd 项:在 MSVC 2013 上 linking 到 protobuf 3 时出错
(@CristiFati 的回答),简要描述了这两种库类型之间的区别。有关动态 link 库的扩展信息,请查看 [MS.Docs]: Dynamic-Link Libraries。 .lib 文件由 VStudio 在构建您的应用程序时使用(在 link 时间更准确地说)。现在,如果一切顺利,您的应用程序已构建(您的项目输出目录中将有一个 .exe 文件)。
当 运行(并调试)该可执行文件时,如果它使用动态库,则这些库 .dll 文件必须存在于 [MS.Docs]: Dynamic-Link Library Search Order(为简单起见,我建议将它们复制到与 .exe 文件相同的文件夹中 - 注意仅用于演示目的,不应作为部署应用程序的方式)。
库在构建时被定义为静态或动态,SFML 网站提供这两种版本(您可以在从源代码构建时指定您想要的版本)。
当您 运行 应用程序时,它会在系统和它自己的目录中查找 SFML 的动态库文件。
你可以在PostBuild项目设置中使用xcopy将你需要的.dlls复制到目标目录中.例如,这会将所有调试 .dlls 复制到包含 .exe:
的目录中
xcopy "$(SFML)\bin\*-d-2.dll" "$(TargetDir)" /Y /D
发布版本的过程类似,但您需要一个文件来指定要排除以 -d[ 结尾的 .dlls =25=]
我目前正在尝试在 Visual Studio 中安装 SFML。我一直在关注这里的教程:http://www.sfml-dev.org/tutorials/2.4/start-vc.php
我已经指定了库位置和我想使用的 .lib。
但是,我对之前的操作只是设置项目以动态加载库的部分感到困惑。这让我很困惑。我不只是指定了 .lib 文件吗? .lib 文件不是静态库吗?为什么项目要在指定静态lib文件后配置为动态加载一个库?
此外,当我转到运行演示项目时。它指出找不到 dll...
教程接着说明,如果您想静态 link 库,您必须指定不同的 .lib 文件并定义预处理器宏。
所以我的问题是:Visual Studio 究竟是如何决定您指向的库是静态加载还是动态加载的?似乎如果我想动态加载一个库,我将不得不指向包含 dll 的目录,而不是 libs。
有什么帮助吗?
VStudio 无法决定如何加载(或更好:假设 使用)某个库。它在构建库时使用它(静态或动态)。当使用 VStudio 构建库时,输出将(几乎)总是包含一个 .lib 文件。
检查 [SO] 的第 2nd 项:在 MSVC 2013 上 linking 到 protobuf 3 时出错 (@CristiFati 的回答),简要描述了这两种库类型之间的区别。有关动态 link 库的扩展信息,请查看 [MS.Docs]: Dynamic-Link Libraries。 .lib 文件由 VStudio 在构建您的应用程序时使用(在 link 时间更准确地说)。现在,如果一切顺利,您的应用程序已构建(您的项目输出目录中将有一个 .exe 文件)。
当 运行(并调试)该可执行文件时,如果它使用动态库,则这些库 .dll 文件必须存在于 [MS.Docs]: Dynamic-Link Library Search Order(为简单起见,我建议将它们复制到与 .exe 文件相同的文件夹中 - 注意仅用于演示目的,不应作为部署应用程序的方式)。
库在构建时被定义为静态或动态,SFML 网站提供这两种版本(您可以在从源代码构建时指定您想要的版本)。
当您 运行 应用程序时,它会在系统和它自己的目录中查找 SFML 的动态库文件。
你可以在PostBuild项目设置中使用xcopy将你需要的.dlls复制到目标目录中.例如,这会将所有调试 .dlls 复制到包含 .exe:
xcopy "$(SFML)\bin\*-d-2.dll" "$(TargetDir)" /Y /D
发布版本的过程类似,但您需要一个文件来指定要排除以 -d[ 结尾的 .dlls =25=]