无法 运行 在没有 visual studio 的情况下在 PC 上发布构建

Cannot run release build on a PC without visual studio

标题几乎说明了一切。

我现在正在学习C++,决定尝试做一个游戏。我也想学C++,但是没有安装VS的朋友试了一下运行,开机就死机了

当我从 VS 外部 运行 时它很好,我将它以包含所有 DLL 的 ZIP 文件和发布版本发送给他。不确定为什么会这样,有人有什么想法吗?

这是代码,写得比较烂,可读性差(抱歉。)

#include "stdafx.h"
#include <SFML/Graphics.hpp>
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>

int main()
{
    HWND hWnd = GetConsoleWindow();
    ShowWindow(hWnd, SW_HIDE);

    bool gameover(1);

    sf::RenderWindow window(sf::VideoMode(240, 500), "Hangman but not very good.");
    sf::Text text;
    sf::Font font;
    sf::Sprite sprite;
    sf::Texture texture;

    texture.loadFromFile("0.png");

    sprite.setTexture(texture);

    char uInput[11] = {0};
    char displayed[11] = {0};
    bool setup = false;
    int charCount(0);
    int iii(0);
    bool correct(0);
    long long wrongGuesses(0);
    int wordlength(0);
    long long gameoverCounter(0);
    char currentGuess = 0;
    bool bypass = true;
    char pngC = '1';
    char IOarray[] = "x.png";
    bool firstSetup = true;
    int correctCounter = 0;

    font.loadFromFile("Xefus.ttf");
    text.setColor(sf::Color::Yellow);
    text.setCharacterSize(24);
    text.setFont(font);
    text.setString("Please enter the word to guess, press enter to stop");

    while(window.isOpen())
    {
        sf::Event event;
        while(gameover)
        {
            while(window.pollEvent(event))
            {
                if(event.type == sf::Event::Closed)
                    window.close();

                if(event.type == sf::Event::TextEntered)
                {
                    bypass = true;

                    if(iii < 10 && !setup)
                        if(event.text.unicode < 128 && event.text.unicode > 96)
                        {
                            uInput[iii] = static_cast<char>(event.text.unicode);
                            ++iii;
                            ++wordlength;
                        }

                    {
                        for(int i = 0; i < wordlength; ++i)
                            if(event.text.unicode == uInput[i] && !firstSetup)
                            {
                                displayed[i] = uInput[i];
                                bypass = false;
                                ++correctCounter;
                            }
                            else if(bypass = true)
                                ++wrongGuesses;
                    }
                }

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
                    setup = true;

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::BackSpace))
                {
                    uInput[iii] = 0;
                    iii -= 1;
                }
            }

            if(!setup)
            {
                text.setString(uInput);
                displayed[wordlength - 1] = ('*');
                setup = false;
            }
            else
            {
                text.setString(displayed);
                bypass = false;

                if(firstSetup)
                {
                    firstSetup = false;
                    gameoverCounter = 0;
                    wrongGuesses = 0;
                    correctCounter = 0;
                }

                if(wrongGuesses >= wordlength)
                {
                    ++gameoverCounter;
                    wrongGuesses = 0;
                    IOarray[0] = static_cast<char>(gameoverCounter + 48);

                    texture.loadFromFile(IOarray);
                }

                if(gameoverCounter >= 9)
                {
                    return 0;
                    window.clear();
                    window.draw(sprite);
                    window.draw(text);
                    window.display();
                }

                if(correctCounter >= wordlength)
                {
                    return 0;
                    window.clear();
                    window.draw(sprite);
                    window.draw(text);
                    window.display();
                }

                wrongGuesses = 0;
            }

            window.clear();
            window.draw(sprite);
            window.draw(text);
            window.display();
        }
    }
}

出现此类问题的原因之一是缺少 dll。因此,请确保系统上有所有依赖的 dll。

我们在复制依赖库时常犯的一个错误是我们忘记复制 运行 任何 C++ 应用程序都需要的 c++ 运行 time dll。此库与 visual studio 一起安装,这就是应用程序 运行 在您的系统上而不在您朋友的系统上的原因。

C++ 运行 时间库是:msvcr、msvcrt、msvcp

您还可以使用 Dependency Walker 软件检查任何其他缺失的依赖项。

希望对您有所帮助

Vikash 是对的,这是缺少 运行time 库的情况。您需要做的是在您的目标计算机上安装正确的 Redistributable 软件包。

Google 并下载适合您的应用程序的版本:

"Visual C++ Redistributable for Visual Studio YYYY" 其中 YYYY 是你 Visual Studio.

的年份

下载后,将其安装到您的目标计算机上,然后 运行 您的应用程序。

安德鲁