我最近一直在使用VC ++ 2008修补一个小游戏项目。我使用SDL,OpenGL,Boost和Box2D作为附带的库。它在我的Windows 7机器以及朋友的w7机器上工作正常。在安装了vc ++ 2008 SP1 redist包的情况下,我的第二个朋友的XP sp3机器怎么办?当他启动.exe时,他得到了错误:
“无法在动态链接库msvcrt.dll中找到过程入口点_ftol2”
我读过的大多数论坛帖子都表明msvcrt.dll已损坏或过时。我的msvcrt.dll版本是7.0.7600.1385,他的版本是7.0.2600.5512。无法找到它的更新,不能简单地替换它,因为它在重新启动时恢复到旧版本,并且似乎没有帮助简单地将我的msvcrt.dll包含在我的游戏文件夹中。 根据gamedev.net上的this主题,OpenGL32.dll调用_ftol2。他们的结论是安装vc ++ 2008 redist pack,我已经提到过它已经安装了。
任何想法可能会解决这个错误?
修改 使用Dependency Walker我确信OpenGL32.dll和GLU32.dll确实在MSVCRT.dll中调用了_ftol2。我如何避免这种依赖?
答案 0 :(得分:3)
我也得到了类似的奇怪消息"strncpy_s could not be located in the dynamic link library msvcrt.dll"
并找到了解决方案。在我的例子中,使用VS 2005创建安装项目,添加了MAPI32.dll。因此,安装是在WIN 7 64下进行的,并且在XP 32下无法运行(尽管从WIN 7使用了正确的MAPI32.dll)。从项目中排除或从目标文件夹手动删除后,一切正常。
答案 1 :(得分:1)
您需要确定引用MSVCRT.DLL的内容。什么都不应该 - 这是CRT的Windows版本。您的应用程序应链接到MSVCRT90.DLL。
答案 2 :(得分:1)
我的游戏不应该包含我系统中的opengl32.dll。 XP上的opengl32.dll是旧版本,并且与XP上的MSVCRT.dll正确链接。当我包含windows 7 opengl32.dll时,它只是与xp dll不匹配。从我的游戏文件夹中删除opengl32.dll和glu32.dll解决了这个问题,游戏运行正常。