Ir ao conteúdo
  • Cadastre-se
Ezert Aracksam

C++ Problemas com o ".exe" do meu programa

Recommended Posts

Olá a todos. Sou iniciante em C++ e SFML. 

Criei um projeto no Code Blocks com linguagem C++ e SFML. Escrevi o código e dentro do Code Blocks (ou seja: ao clicar em "build and run")  o programa roda perfeitamente.

 

Bem, acontece que eu gostaria de acessar meu programa sem precisar entrar no Code Blocks; quero acessar meu programa clicando no .exe dele. Entrei no diretório do projeto, depois em bin e por fim em debug. Lá achei o .exe do programa.

Ao clicar nele, apareceu uma mensagem de erro que me pedia para colocar algumas dll no mesmo diretório do .exe. Copiei as dll pedidas e as colei no diretório do .exe

Ao tentar novamente clicar no .exe, uma nova mensagem de erro apareceu:

 

Citação

Não foi possível localizar o ponto de entrada do procedimento _znkst7__cxx1112basicstringicst11char_traitsicesalcee12find_last_ofepkcj na biblioteca de vínculo dinâmico C:\Users\agwar\Documents\Codes\C++\Projetos\Roller\Roller_Project\bin\Debug\sfml-graphics-d-2.dll

 

Eu não faço a menor ideia do que isso significa...

 

Aqui estão algumas imagens para esclarecer o problema:

 

A pasta com o projeto:

1.thumb.png.8736dfbc4305994b77900051e55c637e.png

 

Dentro da pasta bin:

2.thumb.png.34d6d6ab5b1f22aebfaf0e0c77fd4689.png

 

Dentro da pasta debug (já com as dll)

3.thumb.png.835aa7fafbeed5d5a0db16017e26b325.png

 

Ao clicar em Roller_RPGuara.exe

4.thumb.png.22d1c6998d15715a7a64f72416622159.png

 

 

Grato a quem possa me ajudar...

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

poderia dar mais informação tipo:
-Versão do codeblocks
-Versão do compilador. É o que vem por default no Codeblocks?
-Versão de sistema operativo?(32 ou 64?)
-Que guia usou para instalar o SFML?
-Qual foi o código que você rodou?
-Versão do SFML usado? É o o ultimo? 2.5.1?

Compartilhe aqui seu projeto para poder fazer provas.

 

Para não ter que copiar as dll você pode declarar a pasta bin do sfml na rota(path) do sistema. Ou tentar compilar de forma estatica(DLLs dentro do exe), mas essa opção é inclusive mais complicada >_<, talvez tenha até que compilar manualmente o SFML.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eis as informações:

CodeBlocks: 17.12

Compilador: o padrão que vem com Code Blocks

Versão do Sistema Operativo: 64 

Guia de instalação do SFML: https://youtu.be/fcZFaiGFIMA

Versão do SFML: a mais recente

 

Bem, apesar de eu sentir um pouco de vergonha de expor meu código (ele tá bem bagunçado, mas meu próximo passo era endireitar ele) vou postar ele aqui. Desculpem-me a bagunça, hehe...

 

#include <iostream>
#include <sfml\graphics.hpp>
#include <string>
#include <sstream>
#include <cctype>

using namespace sf;
using namespace std;

string roller (int in) {

    cout << "\nResultados Individuais:\n";

    int numDados = in;

    int sucessos = 0; //número de dados.

    for (numDados; numDados > 0; numDados--) {

        int result = rand()% 6+1;

        switch (result) {

            case 4:
                sucessos++;
            break;

            case 5:
                sucessos++;
            break;

            case 6:
                sucessos++;
                numDados++;
            break;

            default:
            break;

        }

        cout << endl << result << endl;

    }

    string sSucessos = to_string(sucessos);

    return sSucessos;

}

int main () {

    const int x = 300; const int y = 375;//global x & y

    bool next = false; //faz trocar de página.

    bool firstRoll; //habilita a rolagem automática ao trocar de página

    string input; //número de dados.

    int nD; //o valor de string input será convertido para int nD.

    //Window:

        RenderWindow w;

        w.create(VideoMode(x, y), "Dice Roller", Style::Close | Style::Titlebar);

        w.setKeyRepeatEnabled(false);

    //Enunciado:

        Font arial;

            arial.loadFromFile("arial.ttf");

        Text t; //enunciado

        Text tShadow; //sombra do enunciado

        Text n; //número central

        RectangleShape line (Vector2f(x/2, 3)); //linha abaixo do No central

        Text enter; //texto que descreve a função da tecla enter

        Text backs; //texto que descreve a função da telca backspace

        Text sT; //palavra "sucessos"

//--------------------------------------------------------
//Program:

    while (w.isOpen()) {

        Event e;

        if (!next) {

            //Text t

                t.setFont(arial);

                t.setCharacterSize(18);

                t.setColor(Color(50, 50, 50));

                t.setPosition(x/30, y/30);

                t.setStyle(Text::Style::Bold);

                t.setString("INSIRA O NÚMERO DE DADOS:");

                t.setLetterSpacing(1);

            //Text tShadow

                tShadow.setFont(arial);

                tShadow.setCharacterSize(18);

                tShadow.setColor(Color(150, 150, 150));

                tShadow.setPosition(x/30, y/27.3);

                tShadow.setStyle(Text::Style::Bold);

                tShadow.setString("INSIRA O NÚMERO DE DADOS:");

                tShadow.setLetterSpacing(1);

        //Text n

                n.setFont(arial);

                n.setCharacterSize(120);

                n.setColor(Color(150, 150, 150));

                n.setStyle(Text::Style::Bold);

        //RectangleShape line

                line.setPosition(x/4, y*4/9);

                line.setFillColor(Color(50, 50, 50));

        //Text enter:

                enter.setFont(arial);

                enter.setCharacterSize(14);

                enter.setFillColor(Color(255, 100, 100));

                enter.setPosition(x*1/4, y*5/9);

                enter.setStyle(Text::Style::Bold);

                enter.setString("Press Enter to Roll...");


            while (w.pollEvent(e)){

                    switch (e.type) {

                        case Event::Closed:

                            w.close();

                        break;

                        case Event::TextEntered: {

                            if (e.text.unicode == '\b'){ //backsapace

                                    if (input.size() > 0)
                                    {
                                    input.erase(input.size() -1);
                                    if (input.size() < 2) { n.setPosition(x*3/8, y/12); }
                                     else { n.setPosition(x*2/7, y/12); }
                                    n.setString(input);
                                    }

                            } else {

                                char check = '\0';
                                check += e.text.unicode;
                                //se check for um digito ele é adicionado a input. Além disso: lihttp://www.mnemosine.com.br/ojs/index.php/mnemosine/article/download/74/pdf_60mite de dois digitos em input.
                                if (isdigit(check) && input.size() < 2){

                                    input += check;

                                    if (input.size() < 2) { n.setPosition(x*3/8, y/12); }
                                     else { n.setPosition(x*2/7, y/12); }
                                    n.setString(input);

                                }

                            }

                        break;}

                        case Event::KeyPressed:

                            if (Keyboard::isKeyPressed(Keyboard::Enter) && input.size() > 0) {

                                next = true;
                                n.setString("\0"); //limpa a string
                                firstRoll = true; //habilita a primeira rolagem

                            }

                        break;

                        default:
                        break;

                    } //switch e

                    w.clear(Color(230, 225, 225));

                    w.draw(tShadow);

                    w.draw(t);

                    w.draw(line);

                    w.draw(n);

                    w.draw(enter);

                    w.display();

            }//while pollEvent

        } // if next
        else {

            stringstream(input) >> nD; //valor de input é transformado em int.

            //primeira rolagem:

                if (firstRoll) {

                    firstRoll = false; //desativa

                    string sucessos = roller(nD);

                    int intSucessos;

                    stringstream (sucessos) >> intSucessos;

                    if (intSucessos >= 10 && intSucessos <= 99) { n.setPosition(x*2/7, y/12); }
                     else if (intSucessos > 99) {w.close(); cout << "\n\nTeu resultado excedeu o limite de 99 sucessos!\nSucessos: " << intSucessos << endl;}
                      else { n.setPosition(x*3/8, y/12); }


                    n.setString (sucessos);

                } //first roll

            //Text t

                t.setFont(arial);

                t.setCharacterSize(18);

                t.setColor(Color(200, 200, 200));

                t.setPosition(x/8, y/30);

                t.setStyle(Text::Style::Bold);

                t.setLetterSpacing(7);

                t.setString("RESULTADO:");

            //Text tShadow

                tShadow.setFont(arial);

                tShadow.setCharacterSize(18);

                tShadow.setColor(Color(100, 100, 100));

                tShadow.setPosition(x/8, y/27.3);

                tShadow.setStyle(Text::Style::Bold);

                tShadow.setLetterSpacing(7);

                tShadow.setString("RESULTADO:");


            //Text n

                n.setFont(arial);

                n.setCharacterSize(120);

                n.setColor(Color(255, 255, 100));

                n.setStyle(Text::Style::Bold);

            //Text sT

                sT.setFont(arial);

                sT.setCharacterSize(18);

                sT.setColor(Color(255, 255, 100));

                sT.setPosition(x/3, y*31/72);

                sT.setStyle(Text::Style::Bold);

                sT.setOutlineColor(Color::Black);

                sT.setOutlineThickness(5);

                sT.setString("SUCESSOS");

            //RectangleShape line

                line.setPosition(x/4, y*4/9);

                line.setFillColor(Color(200, 200, 200));

            //Text enter

                enter.setFont(arial);

                enter.setCharacterSize(14);

                enter.setFillColor(Color(100, 100, 100));

                enter.setPosition(x/6, y*5/9);

                enter.setStyle(Text::Style::Bold);

                enter.setString("Press Enter to Roll Again...");

            //Text backs

                backs.setFont(arial);

                backs.setCharacterSize(14);

                backs.setFillColor(Color(100, 100, 100));

                backs.setPosition(x/6, y*6/9);

                backs.setStyle(Text::Style::Bold);

                backs.setString("Press Backspace to Return...");


            while (w.pollEvent(e)) {

                switch (e.type) {

                    case Event::Closed:
                        w.close();
                    break;

                    case Event::KeyPressed:

                        if (Keyboard::isKeyPressed(Keyboard::Enter)){

                            string sucessos = roller(nD);

                            int intSucessos;

                            stringstream (sucessos) >> intSucessos;

                            if (intSucessos >= 10 && intSucessos <= 99) { n.setPosition(x*2/7, y/12); }
                             else if (intSucessos > 99) {w.close(); cout << "\n\nTeu resultado excedeu o limite de 99 sucessos!\n Sucessos: " << intSucessos;}
                              else { n.setPosition(x*3/8, y/12); }

                            n.setString (sucessos);

                        } else if (Keyboard::isKeyPressed(Keyboard::Backspace)) {

                            next = false; //RETURN
                            n.setString("\0"); //limpa a string
                            input = "\0"; //limpa string

                        }

                    break;

                    default:
                    break;

                }//switch e

                w.clear(Color::Black);

                w.draw(tShadow);

                w.draw(t);

                w.draw(n);

                w.draw(line);

                w.draw(sT);

                w.draw(enter);

                w.draw(backs);

                w.display();

            }//while pollevent

        } //next

    }//while w.isOpen

}//main

Sobre a alternativa à copiar as dlls: vou procurar aprender isso! Parece bem útil...

adicionado 26 minutos depois

Fiz um teste que talvez possa nos ajudar...

Aparentemente o problema não tem a ver com o SFML... Eu criei um projeto "console application" e fiz um código "Hello World":

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

A seguir, fui na pasta do projeto > bin > debug 

Na pasta debug, achei o executável, mas ao clicar nele uma janela de console abriu e fechou rapidamente.

 

Então provavelmente tem algo de errado com o meu compilador, ou algo assim...

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, Ezert Aracksam disse:

Então provavelmente tem algo de errado com o meu compilador, ou algo assim...

isso é porque o codeblocks "freia" a execução do programa antes de terminar, mas quando você vai diretamente ao exe isso não acontece. Prove por essa linha antes do return 0;

system("pause");

ou um simples

getchar();

Sobre seu programa vou tentar dar uma olha, mas ele ja ta algo "grande". Se encontrar algo aviso.
Nesta pagina oficial do SFML você pode encontrar um tutorial https://www.sfml-dev.org/tutorials/2.5/start-cb.php sobre como instalar de forma correta o SFML.

Vou tentar criar um projeto com a ultima versão do SFML, quando conseguir posto aqui, si alguem já não fez antes, claro. >_<

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×