Ir ao conteúdo

Posts recomendados

Postado

Boa noite, Eu fiz um programinha em c++ que faz um arquivo txt e escreve nele ola mundo, mas quando eu peço pra um amigo testar ele no PC dele aparece esse erro:

 

image.png.76132074a64f3bab7cc58f6ae3ec43aa.png   

#include <stdio.h>
#include <string>
#include <fstream>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
#include <unistd.h>



using namespace std;


int main ()
{
  //Cria o objeto de arquivo
    ofstream arquivodesaida;

    //Abre o aruivo ou cria caso não exista
    arquivodesaida.open("Texto.txt", std::ios_base::app);

    //Escreve algo
    arquivodesaida << "Ola mundo";

    //Fecha o arquivo
    arquivodesaida.close();

    
    system("start Texto.txt");


 return 0;

}

image.png.2deeafa88a712e9187f2485da709e82b.png

Postado
1 minuto atrás, Rafael Delazeri disse:

Você tá compilando por onde? Que compilador tá usando? Isso é problema de linkagem de biblioteca (.dll para Windows). Parace ser alguma configuração ou flag no seu compilador.

Eu to usando o visual studio code, tive que baixar o mingw pra poder compilar no vs code.

Postado

Entendi. Então é melhor você definir a flag de linkagem no compilador, já que você vai executar o binário em outra máquina. Adiciona estas: -static-libgcc -static-libstdc++ ao seu compilador mingw. Não sei como fazer no visual studio code, mas deve ser nas variáveis do projeto ou algo do tipo.

Postado
7 horas atrás, Rafael Delazeri disse:

Entendi. Então é melhor você definir a flag de linkagem no compilador, já que você vai executar o binário em outra máquina. Adiciona estas: -static-libgcc -static-libstdc++ ao seu compilador mingw. Não sei como fazer no visual studio code, mas deve ser nas variáveis do projeto ou algo do tipo.

Vou tentar aq

Postado

nossa... faz tempo que não uso windows, mas ja tive um problema parecido com esse e eu resolvi ele jogando essas libs dentro do direitorio de libs do windows de forma que o programa a encontrava. Talvez precise indicar o caminho dessas libs nas variaveis de ambiente. Já pesquisou sobre isso?
DLLs e variaveis de ambiente do windows

Postado
22 horas atrás, arfneto disse:

Você enviou o programa fonte para alguém "testar" e não o executável? 🤔

Não da pra enviar arquivos exe por aqui.

Postado
5 minutos atrás, arfneto disse:

 

? Não entendi. Onde entra esse forum na questão?

Quando eu mando esse programa que eu fiz pra um amigo, no caso o exe dele,  o meu amigo tenta executar ele e só da erro, o que eu gostaria de saber e o que esta causando esse erro e como eu posso resolver ele. Entendeu?

Postado
22 minutos atrás, SrJoker disse:

Quando eu mando esse programa que eu fiz pra um amigo, no caso o exe dele,  o meu amigo tenta executar ele e só da erro, o que eu gostaria de saber e o que esta causando esse erro e como eu posso resolver ele. Entendeu?

 

Bem, ao que parece você enviou o programa fonte para seu amigo, e não o executável, que é a razão de se escrever um programa: rodar em outras máquinas o mesmo programa.

 

Se você enviou um programa C tudo vai depender do ambiente que o outro computador tem. Pode ser trivial ou pode ser muito complicado. 

 

Você precisa saber que compilador tem lá, no mínimo. E que sistema é. Em geral quando você envia um programa fonte quem recebeu deve saber como se virar e criar um executável.

 

Essa mensagem sobre libstd em geral se deve a um parâmetro errado ou faltando para o ld ou na configuração do ambiente. Se usa g++ pode ser só a falta de um -l para o ld. Ou pode ser que esteja usando Windows e então não deva usar certos headers, como unistd.

 

Esse programa tem 4 linhas e uma chamada a system(). Quer testar se a pessoa que recebeu sabe compilar um programa? O programa em si não faz quase nada.  

 

Há uma convenção em C++ de usar os header C se realmente precisar deles, tirando o .h e usando um c na frente.

 

Não sei porque esse programa acaba indo com tantos headers... 

 

Para que stdio.h? Para que unistd.h?  E windows.h? No mesmo código windows.h e unistd.h? Vai rodar em Windows? Tire o segundo. Vai rodar em Linux? Tire o primeiro

 

 

 

 

 

Postado
8 minutos atrás, arfneto disse:

 

Bem, ao que parece você enviou o programa fonte para seu amigo, e não o executável, que é a razão de se escrever um programa: rodar em outras máquinas o mesmo programa.

 

Se você enviou um programa C tudo vai depender do ambiente que o outro computador tem. Pode ser trivial ou pode ser muito complicado. 

 

Você precisa saber que compilador tem lá, no mínimo. E que sistema é. Em geral quando você envia um programa fonte quem recebeu deve saber como se virar e criar um executável.

 

Essa mensagem sobre libstd em geral se deve a um parâmetro errado ou faltando para o ld ou na configuração do ambiente. Se usa g++ pode ser só a falta de um -l para o ld. Ou pode ser que esteja usando Windows e então não deva usar certos headers, como unistd.

 

Esse programa tem 4 linhas e uma chamada a system(). Quer testar se a pessoa que recebeu sabe compilar um programa? O programa em si não faz quase nada.  

 

Há uma convenção em C++ de usar os header C se realmente precisar deles, tirando o .h e usando um c na frente.

 

Não sei porque esse programa acaba indo com tantos headers... 

 

Para que stdio.h? Para que unistd.h?  E windows.h? No mesmo código windows.h e unistd.h? Vai rodar em Windows? Tire o segundo. Vai rodar em Linux? Tire o primeiro

 

 

 

 

 

Entendi, entao eu preciso tirar a unistd.h para poder rodar em windows?

Postado
#include <fstream>
using namespace std;

int main (void)
{
    //Cria o objeto de arquivo
    ofstream arquivodesaida;
    //Abre o aruivo ou cria caso não exista
    arquivodesaida.open("Texto.txt", std::ios_base::app);
    //Escreve algo
    arquivodesaida << "Ola mundo";
    //Fecha o arquivo
    arquivodesaida.close();

    system("start Texto.txt");
    return 0;
}

 

Em Windows bastaria isso. 

 

Em linux de todo modo precisaria criar algo no lugar do start

 

2 minutos atrás, SrJoker disse:

Entendi, entao eu preciso tirar a unistd.h para poder rodar em windows?

 

Não. O contrário.

Postado
2 minutos atrás, arfneto disse:
#include <fstream>
using namespace std;

int main (void)
{
    //Cria o objeto de arquivo
    ofstream arquivodesaida;
    //Abre o aruivo ou cria caso não exista
    arquivodesaida.open("Texto.txt", std::ios_base::app);
    //Escreve algo
    arquivodesaida << "Ola mundo";
    //Fecha o arquivo
    arquivodesaida.close();

    system("start Texto.txt");
    return 0;
}

 

Em Windows bastaria isso. 

 

Em linux de todo modo precisaria criar algo no lugar do start

 

 

Não. O contrário.

voce tem algum meio de comunicaçao tipo discord ou ts pra mim te perguntar melhor?

Postado
19 minutos atrás, SrJoker disse:

voce tem algum meio de comunicaçao tipo discord ou ts pra mim te perguntar melhor?

 

Estou em frente a 3 terminais. Pode  perguntar se algo não funcionou.

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!