我正在编写一个使用SFML 1.6的C++程序(32位)。发布版本可以编译和运行,没有问题,而调试版本也编译没有问题,但不能运行。Dependency Walker显示调试版本的SFML需要一个MSVCR90D.dll和一个MSVCP90D.dll。在我的硬盘上找不到这两个文件。我没有自己编译SFML (我已经下载了二进制文件),也没有注意到它是用Visual Studio2008编译的,而我使用的是VS2010Express。所以我以为下载VS2008可再发行版可以解决这个问题,但它没有解决这个问题,现在我不确定使用用旧版编译器编译的库是否是一个好主意。
对我做错了什么有什么建议吗?我需要安装哪个可再发行组件才能获得这些丢失的DLL?
PS:我使用的是Win7 64
发布于 2012-05-10 18:07:34
不,不幸的是,这些是VS2008调试运行时DLL(末尾的'D‘)。官方不允许你分发它们。
请注意,在编译器版本之间混合C++是危险的。你的选择可能是
library)
我本打算建议构建器为你重新构建为发行版,但仍然存在2008与2010的问题。
发布于 2012-05-10 19:11:02
对于您的主要问题,Rup是正确的。关于混合VS2008/VS2010运行时,让我们这样说:
libA.dll依赖于VS2008动态链接库runtime;libB.dll依赖于VS2010动态链接库运行时。根据我的经验,在VS项目中使用libA.dll和libB.dll的release版本是安全的,只要:
libA和libB (在链接器中选择正确的libA.lib和libB.lib libA,libB headers <代码>E223不会在运行时创建不匹配,这取决于混合的VS2008/VS2010标题(例如STL)。<代码>H224<代码>F225例如:
// libA.h
#include <vector>
class LibAClass
{
private:
// This is unsafe, warning c4251: users of libA may allocate a different size
// than expected for the vector. The code can perfectly compile but at runtime
// it can cause problems (verified myself)
std::vector _list;
// The following is safe as long as users of libA are not required to
// deal directly with *_listp
std::vector *_listp;
};https://stackoverflow.com/questions/10531753
复制相似问题