Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] fallimentare collegamento a mysql

    Buongiorno a tutti.
    Ho deciso di mettere in pratica un po' la mia teoria di C++ e quindi mi sono messo ad interrogare un db mysql che ho in locale.
    Ecco i passi che ho seguito:

    1) installare libmysql++-dev
    2) importare nel sorgente la libreria <mysql/mysql.h>

    Fino a qui tutto sotto controllo.
    Ho copiato dalla rete un piccolo script:

    codice:
    #include <iostream>
    #include <mysql/mysql.h>
    using namespace std;
    
    const char* host = "localhost"; // host di connessione
    const char* database = "nux";  // database di connessione
    const char* db_user = "root"; // nome utente per la connessione
    const char* db_pass = ""; // password non cifrata
    	
    int main()
    {
    	MYSQL mysql;
    
    	// restituisce NULL se non avviene con successo
    	if (!mysql_init(&mysql)) 
    		cout << "Errore nella allocazione di memoria." << endl;
    
    	if (!mysql_real_connect(&mysql, host, db_user, db_pass, "",0, NULL, 0)) 
    		cout << "Errore nella connessione." << endl;
    
    	// restituisce zero se avviene con successo
    	if (mysql_select_db (&mysql, database))
    		cout << "Errore nella selezione del database." << endl;
    
    	// chiude le risorse
    	mysql_close (&mysql);
    }
    Il codice è del tutto logicamente sbagliato; l'ho abbozzato solo per controllare eventuali errori in fase di compilazione. E infatti ottengo questo:

    codice:
    /tmp/ccYxNiDH.o: In function `main':
    test.cpp: (.text+0x85): undefined reference to `mysql_init'
    test.cpp: (.text+0xfd): undefined reference to `mysql_real_connect'
    test.cpp: (.text+0x141): undefined reference to `mysql_select_db'
    test.cpp: (.text+0x1a0): undefined reference to `mysql_close'
    collect2: ld returned 1 exit status
    Sapreste spiegarmi il motivo? Dite che sto usando codice obsoleto? :berto:
    Vi ringrazio in anticipo!!!

  2. #2

    Re: [C++] fallimentare collegamento a mysql

    Originariamente inviato da Tobler

    2) importare nel sorgente la libreria <mysql/mysql.h>
    Non è una libreria ma un header.

    Insomma devi aggiungere la libreria al tuo progetto. Consulta la documentazione del tuo compilatore e quella della library che hai installato.

  3. #3
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    e cmq quel codice è della libreria mysql per C nn c++ che sarebbe mysql++
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  4. #4
    Grazie per la puntualizzazione e il suggerimento!
    Direi di cambiare completamente strumentazione passando a mySQL++ ... tornerò in caso di dubbi o blocchi psicologici.
    Grandi!

  5. #5
    Originariamente inviato da Tobler
    ...
    Direi di cambiare completamente strumentazione passando a mySQL+

    Grandi!
    direi di no
    segui il suggerimento che ti ha dato MacApp e inserisci nel tuo progetto la libreria mysql che, se usi windows, si chiama libmysql.dll, e gli errori che ti ha segnalato il linker magicamente scompareranno. Per aggiungere una libreria ad un progetto devi consultare la documentazione, ma solitamente è sempre estremamente semplice.

    Questo problema lo hai anche se utilizzi i wrapper scritti in c++, devi comunque sempre dire al linker dove si trova la libreria.
    Il mio consiglio è di comunque prendere confidenza con le funzioni C della libreria mysql e successivamente, se lo ritieni opportuno, uliizzare wrapper già scritto o fartene uno tuo ad hoc
    ciao
    sergio

  6. #6
    Originariamente inviato da mondobimbi
    direi di no
    segui il suggerimento che ti ha dato MacApp e inserisci nel tuo progetto la libreria mysql che, se usi windows, si chiama libmysql.dll, e gli errori che ti ha segnalato il linker magicamente scompareranno. Per aggiungere una libreria ad un progetto devi consultare la documentazione, ma solitamente è sempre estremamente semplice.

    Questo problema lo hai anche se utilizzi i wrapper scritti in c++, devi comunque sempre dire al linker dove si trova la libreria.
    Ciao mondobimbi, grazie per la precisazione. Dicevo di voler passare a MySQL++ proprio perchè io stavo programmando in C++... una questione di coerenza, insomma.
    Comunque avendo a disposizione la versione per C sperimenterò con quella (ho anche capito come linkare le librerie )

    Il mio consiglio è di comunque prendere confidenza con le funzioni C della libreria mysql e successivamente, se lo ritieni opportuno, uliizzare wrapper già scritto o fartene uno tuo ad hoc
    ciao
    sergio
    Nei miei sogni infatti vorrei realizzare una classe wrapper da riutilizzare poi in altri progetti...
    vedremo come andrà a finire!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.