Pular para o conteúdo

Erro compilar exemplos mysql++ com g++

Responder tópico
  • Denunciar
  • Indicar
01 02

13. algum progresso...

Enviado em 13/05/2008 - 11:01h

Opa agora tá dando bem menos erros e dá pra "intender" mais ou menos oque está acontecendo... ao compilar o arquivo simple1.cpp que se encontra em /usr/share/doc/libmysql++-dev/examples/simple1.cpp ele me retorna os erros:

server:/usr/share/doc/libmysql++-dev/examples# g++ -lmysqlpp -I/usr/include/mysql -I/usr/include/mysql++ simple1.cpp -o simple
/tmp/cckfLsUl.o: In function `main':
simple1.cpp:(.text+0xbe): undefined reference to `connect_to_db(int, char**, mysqlpp::Connection&, char const*)'
simple1.cpp:(.text+0x1ba): undefined reference to `utf8trans(char const*, char*, int)'

pelo que entendo ele diz que não foram declaradas as funções connect_do_db e utf8trans

mais eu devo então declarar essas funções antes do main() como você disse?
A questão é, onde encontrar essas funções para que eu possa as declarar antes de main(), porque eu não sei como elas funcionam...

desde já, muito obrigado pela ajuda galera...





Aqui o arquivo simple1.cpp que eu estou compilando.:


#include "util.h"

#include <mysql++.h>

#include <iostream>
#include <iomanip>

using namespace std;

int
main(int argc, char *argv[])
{
// Connect to the sample database.
mysqlpp::Connection con(false);
if (!connect_to_db(argc, argv, con)) {
return 1;
}

// Retrieve a subset of the sample stock table set up by resetdb
mysqlpp::Query query = con.query();
query << "select item from stock";
mysqlpp::Result res = query.store();

// Display the result set
cout << "We have:" << endl;
if (res) {
char buf[100];
mysqlpp::Row row;
mysqlpp::Row::size_type i;
for (i = 0; row = res.at(i); ++i) {
cout << '\t' << utf8trans(row.at(0), buf, sizeof(buf)) << endl;
}
}
else {
cerr << "Failed to get item list: " << query.error() << endl;
return 1;
}

return 0;
}

Responder tópico

14. Re: Erro compilar exemplos mysql++ com g++

Enviado em 13/05/2008 - 11:31h

Mesma coisa aqui, para ser mais exato, todos os exemplos que testei estão com algum problema...

Algum pacote que tem que ser intalado a mais pelo jeito, pois quando uso a biblioteca que baixei do site do MySQL e compilei na mão esses problemas não existem.

Acho melhor você compilar na mão, pois com esses pacotes da Debian tá complicado mesmo...

15. ok, mais como proseguir?

Enviado em 13/05/2008 - 11:57h

blz, sou meio leigo nisso. Compilar à mão que você diz é baixar o pacote source no http://tangentsoft.net/mysql++/ certo?

baixei o pacote mysql++-3.0.3.tar.gz, descompactei e então acesso ele e dou ./configure daí make e então make install certo?

fiz tudo isso não deu erro algum, mais ao compilar o exemplo anterior, estando na mesma pasta, dá o mesmo erro...

será que preciso remover os pacotes instalados via apt-get com apt-get remove nome_do_pacote antes de fazer essa instalação manual?

16. Re: Erro compilar exemplos mysql++ com g++

Enviado em 13/05/2008 - 13:14h

Isso mesmo, o source é esse mesmo.

O procedimento é esse mesmo, ./configure, make e (sendo root) make install. Fiz um teste deixando os pacotes que instalei pelo aptitude e não tive problemas de conflito, acho que você pode deixar os dois...

Acredito pelo que você disse acima que já está funcionando o seu também. Nesse mesmo diretório (onde você compilou) você deve ver os arquivos de exemplos já compilados e funcionando.

Os fontes deles ficam nesse mesmo diretório /exemples


Conseguiu verificar isso?

17. ok, vamos lá

Enviado em 13/05/2008 - 17:54h

se eu compilar o simple1.cpp de:/usr/share/doc/libmysql++-dev/examples:


server:/usr/share/doc/libmysql++-dev/examples# g++ -lmysqlpp -lmysqlclient -I/usr/include/mysql -I/usr/include/mysql++ simple1.cpp
/tmp/cc9ugrr8.o: In function `main':
simple1.cpp:(.text+0xbe): undefined reference to `connect_to_db(int, char**, mysqlpp::Connection&, char const*)'
simple1.cpp:(.text+0x1ba): undefined reference to `utf8trans(char const*, char*, int)'
collect2: ld returned 1 exit status
server:/usr/share/doc/libmysql++-dev/examples#


se eu for no diretório onde tem os fontes do mysql++ que eu usei para instalar como dito acima e entrar na pasta examples e compilar:


server:/home/web/www/arqs/mysql++-3.0.3/examples# g++ -lmysqlpp -lmysqlclient -I/usr/include/mysql -I/usr/include/mysql++ simple1.cpp
printdata.h:35: error: expected unqualified-id before '&' token
printdata.h:35: error: expected ',' or '...' before '&' token
printdata.h:37: error: ISO C++ forbids declaration of 'parameter' with no type
printdata.h:38: error: variable or field 'print_stock_rows' declared void
printdata.h:38: error: 'StoreQueryResult' is not a member of 'mysqlpp'
printdata.h:38: error: 'res' was not declared in this scope
simple1.cpp: In function 'int main(int, char**)':
simple1.cpp:52: error: no matching function for call to 'mysqlpp::Connection::query(const char [23])'
/usr/include/mysql++/connection.h:199: note: candidates are: mysqlpp::Query mysqlpp::Connection::query()
simple1.cpp:53: error: 'StoreQueryResult' is not a member of 'mysqlpp'
simple1.cpp:53: error: expected `)' before 'res'
simple1.cpp:55: error: 'res' was not declared in this scope

ainda não está compilando direito... vou ver se axo alguma coisa aqui, mais se tiver alguma sugestão..

18. O caminho das pedras

Enviado em 15/05/2008 - 09:48h

Edita o examples/simple1.cpp
Depois utilize o make do mysql em si (o que você já usou para compilar a biblioteca), no lugar desse na mão.

Assim que consegui compilar anteriormente.



Bem, mas agora que tive algum tempo, resolvi compilar na mão, para isso fiz o seguinte:

Copie o Makefile da pasta do MySQL para a pasta de examples
Alterei o Makefile, excluindo o desnecessário e alterando os paths.

Compilei e funcionou.

Depois fui resumindo o que estava a mais e cheguei ao seguinte comando (que funcionou):

g++ -I/usr/include/mysql -I/usr/include/mysql++ -lmysqlclient -lmysqlpp -o simple1 simple1.cpp cmdline.cpp


19. chatisse...

Enviado em 20/05/2008 - 08:00h

Primeiramente quero agradecer a todos, principalmente a você Rodrigo, vlw mesmo por tentar me ajudar...
Mais por enquanto vou fazer minha aplicação em C mesmo, porque em C já consegui acesso a banco de dados e estou me saindo bem...
Assim que sobrar mais tempo vou reformatar meu note daí vou reinstalar debian e o mysql na mão, daí então recomeçarei os testes, espero que daí sim funcione...

Mais uma vez obrigado

20. cara

Enviado em 20/05/2008 - 10:27h

sem querer ser chato mas sendo, vai uma dica e opnião minha.
Se sua aplicação for pequena manda brasa no C mesmo, é bom que as vezes acaba ficando mais leve dependendo de como é feita.
Agora se você pretende algo de manutenção mais facil (e isso é necessário principalmente em aplicações maiores) e nesse caso recomendo até usar stl e tudo mais, então perde um tempo pra deixar o negócio funcionando e fazer em C++ doque depois perder mto mais tempo na manutenção em C. Eu acho C muito bom pra muita coisa, principalmente quando se quer portabilidade e performance, mas C++ é muito mais produtivo e se a aplicação for bem estruturada vai ter uma manutenção muito melhor.

21. interessante...

Enviado em 21/05/2008 - 10:41h

olá João. Não tem nada de chato em dar sua opinião, ainda mais quando construtiva, que é o caso. Sou inesperiente em programação com C ou C++, agradeço seu comentário, com ele percebi que estou indo pro caminho certo hehe.
Minha aplicação realmente não é muito grande. É um projeto de controle de alarme que estou fazendo, o ussuário remotamente ativa/desativa o alarme via celular ou internet, e em determinado momento eu precisei acessar o banco de dados, e como vou precisar disso...
Resumindo o que preciso é mesmo de velocidade e pelo que você disse C é bom nisso, então fico feliz em saber.

Obrigado pela dica.
01 02

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder