Visual Studio 2010 c++ SDL游戏可以在它编译的计算机上运行,但不能在任何其他计算机上运行



我使用SDL和Visual Studio 2010在c++中编写了一个游戏。我已经在发布中构建了它,如果我在我编译它的计算机上运行.exe (Windows 7 64位家庭高级版),它就不会有问题。

我试着在我的笔记本电脑上运行它(Windows 7 x86 Home premium),它打开了一个SDL窗口,然后立即关闭。我发现它在加载特定文件时崩溃了,所以在初始化代码中添加了控制台输出,结果是它找不到这个文件:

if((menuSurface = Surface::Load("gfx/menu.png")) == NULL){
        std::cout << "menu Did not load.";
        system("pause");
        return false;
    }

特别的是,这是第二个加载的文件,原来的计算机可以找到它。

以上问题已解决!我只是忘记添加sdl_image附带的额外。dll文件,如zlib1.dll, libpng12 . 0.dll等…第二个问题仍然存在。

另外,在我朋友的电脑上,当我运行它时,它出现了这个错误

TestWin32.exe - System Error

程序无法启动,因为您的中缺少MSVCR100.dll*计算机。尝试重新安装程序以解决此问题。*

我将MSVCR100.dll文件(以及SDl.dll和SDL_image.dll)包含在与.exe相同的文件夹中,但仍然没有乐趣。该文件存在于他的SysWOW64文件夹中,但程序没有拾取它。有人知道是什么引起的吗?

第一个问题可能是资源不在正确位置的问题。

第二个问题是,对于新的Microsoft C运行时dll,您不能仅仅包含它,您需要为Visual Studio 2010部署适当的可重新发布版本。

你可以在这里找到(x86)。如果您需要的话,还有一个单独的x64版本。

这可能是识别您忘记随程序附带哪些库的最有用的工具:

  • Dependency Walker

它最初包含在Windows SDK中,但该网站已经更新了版本。

在目标机器上安装microsoftvc++ redist,在试图复制msvcr100.dll/msvcp100.dll时遇到了麻烦。

找出您的可执行文件正在动态加载的dll,无论是在您的开发系统还是在其他系统上。

我怀疑一些DLL正在加载,不应该,例如一个库的DLL在一个错误的版本。

最新更新