Autor Tópico: Programacao C++ no ubuntu  (Lida 11285 vezes)

Offline Gibbs

  • Usuário Ubuntu
  • *
  • Mensagens: 24
    • Ver perfil
Programacao C++ no ubuntu
« Online: 24 de Abril de 2013, 11:00 »

Boas para todos.

Estou testando um programa no codeblocks 10.05 no  ubuntu 12.04 em c++ com acesso ao mysql.
Já tenho instalado tudo, criei uma tabela no mysql, e quando tento compilar o programa dá erro na 2ª linha ( veja abaixo ).
Erro: /home/usuario/Programas C-C++/Linux/C++/AcessoDB/main.cpp:2:52: fatal error: mysql-conn/mysql.h: No such file or directory
Pergunta: onde encontro a biblioteca mysql.h e onde coloco ela ?

Grato a todos.
Gibbs.

#include  <istream>// Para usar o cin.get
#include  "mysql/mysql.h"  // biblioteca mysql
#include  <istringstream> // para usar o istringstream

???

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #1 Online: 24 de Abril de 2013, 12:33 »
No Debian e derivados, os headers e etc (arq. necessários somente pra desenvolvimentos), são empacotados separadamente, e possuem o sufixo "-dev", no seu caso: "libmysqlclient-dev".

Offline Gibbs

  • Usuário Ubuntu
  • *
  • Mensagens: 24
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #2 Online: 24 de Abril de 2013, 12:47 »
No Debian e derivados, os headers e etc (arq. necessários somente pra desenvolvimentos), são empacotados separadamente, e possuem o sufixo "-dev", no seu caso: "libmysqlclient-dev".

Quer isto dizer que tenho que intalar o pactote "libmysqlclient-dev". ?

Já instalei, e agora diz que não encontra as bibliotecas.

Falta indicar o caminho das bibliotecas ? onde elas estão ?

Gibbs

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #3 Online: 24 de Abril de 2013, 13:44 »
Você poderia ter checado o conteúdo do pacote, de qualquer forma, o header está em "/usr/include", como todos os demais do sistema. Nesse pacote também está presente um utilitário que facilita a ligação, mysql_config, dê uma olhada.

Outra coisa, como não é local, prefira <mysql/mysql.h>.

Darcamo

  • Visitante
Re: Programacao C++ no ubuntu
« Resposta #4 Online: 24 de Abril de 2013, 22:29 »
Para usar uma biblioteca no seu programa, seja mysql ou outra qualquer, você precisa de duas coisas: dos cabeçalhos que correspondem aos arquivos ".h" e da biblioteca propriamente dita (normalmente um arquivo ".so", que são as bibliotecas para linkagem dinâmica, mas tem também os arquivos ".a" que são bibliotecas para linkagem estática).

Quando você instala no ubuntu algum programa que foi feito usando mysql então a biblioteca será instalada automaticamente, caso já não esteja, como dependência desse programa. Só que os arquivos de cabeçalho não são instalados porque eles só são úteis para quem vai programar usando a biblioteca e não para quem quer apenas usar um programa que foi feito com essa biblioteca.

Como no seu caso você quer é programar então tem que instalar os cabeçalhos e isso é feito normalmente instalando um pacote da biblioteca cujo nome termina com "-dev". Uma vez que você tenha instalado o pacote "-dev" certo você não obterá mais o erro de arquivo .h não encontrado quando tentar compilar seu programa.

No entanto, você provavelmente obterá erros de referência indefinida para funções que você usou nessa biblioteca. Isso acontece porque o gcc não vai linkar seu programa automaticamente com uma biblioteca. Você precisa indicar isso na hora da compilação.
O comando para compilar provavelmente seria similar a
Código: [Selecionar]
g++ seuprograma.cpp -lNOMEonde NOME é o nome da biblioteca. Note que tem um "-" e um "L" minúsculo antes do NOME.

As bibliotecas ficam normalmente na pasta /usr/lib e possuem nomes na forma "libNOME.so" ou "libNOME.a". Quando você usa  parâmetro "-lNOME" o g++ inclui "lib" no começo e a extensão no fim para encontrar o arquivo. Você também poderia compilar com
Código: [Selecionar]
g++ seuprograma.cpp /usr/lib/libNOME.so

Offline Gibbs

  • Usuário Ubuntu
  • *
  • Mensagens: 24
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #5 Online: 26 de Abril de 2013, 07:20 »
Para usar uma biblioteca no seu programa, seja mysql ou outra qualquer, você precisa de duas coisas: dos cabeçalhos que correspondem aos arquivos ".h" e da biblioteca propriamente dita (normalmente um arquivo ".so", que são as bibliotecas para linkagem dinâmica, mas tem também os arquivos ".a" que são bibliotecas para linkagem estática).

Quando você instala no ubuntu algum programa que foi feito usando mysql então a biblioteca será instalada automaticamente, caso já não esteja, como dependência desse programa. Só que os arquivos de cabeçalho não são instalados porque eles só são úteis para quem vai programar usando a biblioteca e não para quem quer apenas usar um programa que foi feito com essa biblioteca.

Como no seu caso você quer é programar então tem que instalar os cabeçalhos e isso é feito normalmente instalando um pacote da biblioteca cujo nome termina com "-dev". Uma vez que você tenha instalado o pacote "-dev" certo você não obterá mais o erro de arquivo .h não encontrado quando tentar compilar seu programa.

No entanto, você provavelmente obterá erros de referência indefinida para funções que você usou nessa biblioteca. Isso acontece porque o gcc não vai linkar seu programa automaticamente com uma biblioteca. Você precisa indicar isso na hora da compilação.
O comando para compilar provavelmente seria similar a
Código: [Selecionar]
g++ seuprograma.cpp -lNOMEonde NOME é o nome da biblioteca. Note que tem um "-" e um "L" minúsculo antes do NOME.

As bibliotecas ficam normalmente na pasta /usr/lib e possuem nomes na forma "libNOME.so" ou "libNOME.a". Quando você usa  parâmetro "-lNOME" o g++ inclui "lib" no começo e a extensão no fim para encontrar o arquivo. Você também poderia compilar com
Código: [Selecionar]
g++ seuprograma.cpp /usr/lib/libNOME.so

Grato pela explicação, muito bom para "inicio". Pois programar neste S.O. tem a particularidade do próprio sistema.
Mas vou estudar o que disse e tentar por a correr.

Valeu.
Gibbs.

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #6 Online: 26 de Abril de 2013, 08:41 »
São conceitos da linguagem, que uma vez bem dominados, tornam irrelevante as "peculiaridades" do sistema (que nesse caso, é basicamente a separação do header).

Offline Gibbs

  • Usuário Ubuntu
  • *
  • Mensagens: 24
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #7 Online: 26 de Abril de 2013, 12:25 »
Você poderia ter checado o conteúdo do pacote, de qualquer forma, o header está em "/usr/include", como todos os demais do sistema. Nesse pacote também está presente um utilitário que facilita a ligação, mysql_config, dê uma olhada.

Outra coisa, como não é local, prefira <mysql/mysql.h>.

Desculpe a pergunta de iniciante, mas o utilitário que diz é o "libmysqlclient-dev" ?
eu instalei via comando, mas este utilitário mysql_config onde ele fica localizado depois da instalação ?
Fiz uma procura e não encontrei.

Grato.
gibs.

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #8 Online: 26 de Abril de 2013, 13:55 »
É um utilitário de linha de comando, abra o terminal e digite "mysql_config", sem aspas.

Darcamo

  • Visitante
Re: Programacao C++ no ubuntu
« Resposta #9 Online: 29 de Abril de 2013, 19:59 »
Nunca programei com SQL então dei o libmysqlclient-dev como exemplo para explicar o "-dev" no nome. Tente instalar o pacote "libmysql++-dev" que acredito ser o que você realmente precisa. Após instalado, você terá o programa mysql_config indicado pelo irtigor e pode rodar esse programa no terminal.

Algumas bibliotecas fornecem um programa normalmente chamado nomeDaBiblioteca_config, que é o caso da SQL, cuja única função é lhe informar os parâmetros que você deve usar para compilar um programa com essa biblioteca. Isso facilita muito as coisas. Por exemplo, instalei o pacote libmysql++-dev e abaixo segue o resultado. No terminal digitei
Código: [Selecionar]
mysql_config --cflags --libse obtive a seguinte informação
-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl

Supondo que estou criando um programa que usa a SQL e tenho 3 arquivos chamados main.cpp, file1.h, file1.cpp e quero compilar meu programa. Para isso basta eu usar o comando abaixo
Código: [Selecionar]
g++ main.cpp, file1.h, file1.cpp -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl
Não lembro se o nomes dos meus arquivos vem antes ou depois das opções de compilação, mas acho que não faz diferença.

Note que na hora rodar o comando mysql_config eu passei duas opções, "--cflags" e "--libs". O primeiro pede para o mysql_config informar opções que o g++ vai usar na hora da compilação, enquanto que o segundo pede informações que serão usadas na hora da linkagem. Coloquei tudo em um comando só para facilitar, mas é útil saber a diferença porque se você for usar uma IDE depois normalmente as IDEs tem os lugares certos para colocar essas informações.

Uma outra dica para facilitar, eu também poderia compilar esse meu exemplo com o comando
Código: [Selecionar]
g++ main.cpp, file1.h, file1.cpp `mysql_config --cflags --libs`Ao colocar o comando mysql_config dentro de sinais de crase o shell do linux vai substituir tudo pelo resultado resultando assim no comando completo de compilação.

PS: Para facilitar a compilação você pode criar um Makefile. Aqui tem um tutorial que criei a um bom tempo
http://ubuntuforum-pt.org/index.php/topic,21155.0.html

Outra opção, claro, é usar uma IDE, mas aprender a fazer as coisas apenas com um editor de texto e o terminal é bem educativo.

Offline Gibbs

  • Usuário Ubuntu
  • *
  • Mensagens: 24
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #10 Online: 02 de Maio de 2013, 13:13 »

Alô Darcamo, vou ver o que voce disse, q.q. dúvida posto aqui.
grato.

Offline Gibbs

  • Usuário Ubuntu
  • *
  • Mensagens: 24
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #11 Online: 02 de Maio de 2013, 13:28 »

Está dando o seguinte erro
ligabd.cpp:3:55: fatal erros: istringstream: NO such file or  directory
compilation teminated.

No seguimento da dúvida logo de início, qual o motivo dela não encontrar está bilioteca ?
Estou usando o código abaixo ( peguei na net para testar )

#include  <istream> // Para usar o cin.get
#include  "mysql/mysql.h"  // biblioteca mysql
#include  <istringstream> // para usar o istringstream

using namespace std;

int main(void)
{
 MYSQL DBCon; // Vairiavel de conexão
 MYSQL_RES *result; //variável que recebe o resultado
 MYSQL_ROW dados; //variável que recebe os dados

 int ID; // Converter para integer

 // Inicia a variável DBCon
 mysql_init(&DBCon);

 //Conecta com o banco de dados
 if ( mysql_real_connect(&DBCon, "127.0.0.1", "root", "senha", "acessodb", 0, NULL, 0) )
 {
       printf("Conectado!\n\n");
  }
  else
  {
       //Escreve o erro que ocorreu
       printf("Erro n %d : %s\n", mysql_errno(&DBCon), mysql_error(&DBCon));
   cin.get();  //Espera o usuário pressionar uma tecla
   cin.get();
   return 1;
  }

// Executa a consulta
if(mysql_query(&DBCon,"select * from usuarios"))
{
printf("Erro n %d : %s\n",mysql_errno(&DBCon),mysql_error(&DBCon));
cin.get();
cin.get();
return 1;
}

// Recebe os dados da cunsulta
result = mysql_store_result(&DBCon);

// Se consultou (sem erros)
if (result)
{
// Enquanto receber dados vai escrevendo
while ((dados=mysql_fetch_row(result)) != NULL)
{
 // Escreve os dados formatados sende estes a ID e o NOME

 istringstream buffer(dados[0]); // Cria a variável que recebera a string a ser convertida para int
 buffer >> ID; // Convert a string para int
 printf("%02d     %s\n",ID,dados[1]); // Escreve formatado
}

// Limpa da memória
mysql_free_result(result);

}
else
{
printf("Erro n %d : %s\n", mysql_errno(&DBCon), mysql_error(&DBCon));
cin.get();
cin.get();
return 1;
}
printf("\n");
// Fecha a conexão ...
mysql_close(&DBCon);

return 0;
}

Darcamo

  • Visitante
Re: Programacao C++ no ubuntu
« Resposta #12 Online: 02 de Maio de 2013, 20:13 »
O include correto para usar o istringstream é
Código: [Selecionar]
#include <sstream>

Precisei incluir também
Código: [Selecionar]
#include <cstdio> // Necessário porque vc está usando o printf
#include <iostream> // Necessário porque você está usando o cin

Com isso consegui compilar seu programa com o comando abaixo
g++ test.cpp `mysql_config --cflags --libs`
onde test.cpp é o nome que salvei o arquivo.

Offline Gibbs

  • Usuário Ubuntu
  • *
  • Mensagens: 24
    • Ver perfil
Re: Programacao C++ no ubuntu
« Resposta #13 Online: 03 de Maio de 2013, 07:47 »
O include correto para usar o istringstream é
Código: [Selecionar]
#include <sstream>

Precisei incluir também
Código: [Selecionar]
#include <cstdio> // Necessário porque vc está usando o printf
#include <iostream> // Necessário porque você está usando o cin

Com isso consegui compilar seu programa com o comando abaixo
g++ test.cpp `mysql_config --cflags --libs`
onde test.cpp é o nome que salvei o arquivo.

OK,  também consegui. Funcionou.
Obrigado pela ajuda.
Está dando para pegar alguma experiência.
Em sua opinião ( e quem quiser dar a sua ), qual IDE melhor para compilar criar executável em c/c++ no ubuntu ?

Grato.






Darcamo

  • Visitante
Re: Programacao C++ no ubuntu
« Resposta #14 Online: 03 de Maio de 2013, 18:15 »
IDEs tem várias e já houveram muitos tópicos aqui perguntando sobre isso. Basta dar uma pesquisada aqui no fórum sobre IDE.
Algumas das comumente citadas são: Eclipse, anjuta, kdevelop, geany, code::blocks, qt creator, etc.

Ainda prefiro usar um bom editor de texto ao invés de uma IDE e compilar usando um Makefile genérico que criei faz muito tempo (na época que escrevi esse tutorial que mencionei antes). Acho mais leve, rápido, confiável e na minha opinião nada substitui o Emacs para escrever qualquer tipo de texto, seja programação ou não (até leio e escrevo e-mails no Emacs e você pediu uma opinião  :P ).

Tente alguma dessas IDEs que citei que são bem conhecidas e você deve gostar de alguma. Eu começaria pelo Eclipse e embora ele seja um pouquinho complicado no começo, acredito que não deixe nada a desejar em relação a nenhuma outra (acredito que seja bastante usado comercialmente também). Se o Eclipse ficar pesado no seu computador, tente então o code:blocks ou o geany que são bem leves.