Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    [C++] Problemi con l'utilizzo di MySQL Connector

    Salve,

    sto cercando di far funzionare l'esempio riportato a questo indirizzo, dopo aver scaricato il plugin, da qui ma non riesco a farlo funzionare.

    Il file che sto cercando di compilare è questo ma ho cambiato gli include, come segue, e per i motivi che sto per elencare non va.:

    codice:
    /* MySQL Connector/C++ specific headers */
    #include "include/cppconn/driver.h"
    #include "include/cppconn/connection.h"
    #include "include/cppconn/statement.h"
    #include "include/cppconn/prepared_statement.h"
    #include "include/cppconn/resultset.h"
    #include "include/cppconn/metadata.h"
    #include "include/cppconn/resultset_metadata.h"
    #include "include/cppconn/exception.h"
    #include "include/cppconn/warning.h"
    Sto cercando di compilare quel file sorgente in un progetto creato con Eclipse. Nella root del progetto ho copiato le directory lib e include, ma quando tento di compilare il file allegato, ho subito un errore alla riga 165:
    undefined reference to `get_driver_instance'

    poi un'altro alla riga 190
    Invalid arguments 'Candidates are: sql::ResultSet * executeQuery(const ? & )'

    Poi altri errori simili alla riga 207, 215 e 229.

    A quanto vedo, non riconosce le funzioni chiamate, nonostante gli include che ho fatto all'inizio, ma allora non capisco dove sbaglio.

    Ma c'è di più. Se vado a "ispezionare" il codice del file mysql_driver.h incluso nel tar.gz scaricato dal sito, c'è un'errore alla riga 50:
    Symbol 'scoped_ptr' could not be resolved

    ma anche nel file mysql_connection.h alla riga 156
    Symbol 'shared_ptr' could not be resolved

    Perché non funziona? Ho dimenticato qualche passaggio prima di usare il connector?


    EDIT1: nel frattempo ho fatto qualche altra prova, e credo di aver capito qual'è il problema.
    Gli errori di sopra li ho risolti installando mysql-connector-c++ tramite il package manager di Gentoo Linux, ed ora ho potuto riscrivere tutti gli include come nel file originario, però c'è ancora un problema: non mi vede il namespace sql.

    EDIT2:: ho anteposto la scritta "using namespace sql;" alla scritta "using namespace std;", però l'errore alla riga 165 che ho riportato poco fa, ancora persiste.

    EDIT3:: OK, risolto. Bisognava linkare al progetto anche questo:
    /usr/lib64/libmysqlcppconn.so. Fonte.

    Spero che possa essere utile a qualche altro utente.

  2. #2
    io sinceramente qualche problema ce l'ho ancora.
    ho provato sia con Netbeans che con Qt creator.
    sia su linux che su windows ho installato il Connector.
    su Netbeans ho fatto così.
    ho aggiunto la directory con tutti i file .h al progetto.
    poi ho incluso i file necessari nel file.
    solo che mi dipendenze irrisolte.
    ad esempio il file mysql_driver.h mi dice che nn trova boost/scoped_ptr.hpp, che in effetti nn c'era quando ho scaricato il tutto.
    avete qualche idea?

  3. #3
    Ciao,

    credo che sia lo stesso problema che avevo io, e che ho risolto con la terza modifica al mio primo post.

    A quanto ho capito, è diverso da Java, in cui si include un .jar dentro una directory lib del progetto e si usa quello.

    In questo caso invece, sempre se non sbaglio, è proprio necessario installare il connector a livello di sistema, e non semplicemente copiando le librerie nel progetto (in realtà qualche dubbio mi rimane sul fatto che invece ciò sia fattibile), ma compilando il connector dai sorgenti e installandolo, in modo tale che siano presenti tutti i file necessari e che siano visibili a livello di sistema.

    Infatti, gli include che riporta anche l'esempio sono del tipo:

    codice:
    #include <driver.h>
    #include <connection.h>
    #include <statement.h>
    e non come li avevo scritti io all'inizio, con il percorso relativo.

  4. #4
    si ma io il connettore l'ho installato.
    su windows ho installato quello preso da qua: http://www.mysql.it/downloads/connector/cpp/
    se pensi sia quello posso riprovare a reinstallarlo, però mi pare strano.

  5. #5
    Guarda, su windows non saprei, non ho avuto modo di provarlo.

    Quello che posso suggerirti è di installare il connector su Linux usando il package manager della tua distribuzione e riprovare.
    Netbeans non lo conosco bene, però ti posso dire che per far funzionare le cose in un progetto eclipse ho dovuto includere nel progetto:

    • il path /usr/include/cppconn/
    • mysqlclient per quanto riguarda le librerie nel linker


    Ovvero, le opzioni di compilazione sarebbero queste:
    "-Lmysqlclient" e "-l/usr/include/cppconn"

    Ovviamente per il punto 2 dell'elenco sopra, devi avere /usr/lib64/libmysqlclient.so*, che comunque viene installato insieme agli header.

  6. #6
    Originariamente inviato da fbcyborg
    Ovvero, le opzioni di compilazione sarebbero queste:
    "-Lmysqlclient" e "-l/usr/include/cppconn"
    Scusa ho sbagliato, è così:

    "-I/usr/include/cppconn" e "-lmysqlcppconn"

    In pratica nel Compiler devi includere il path /usr/include/cppconn
    e nel linker devi includere la libreria mysqlcppconn.

  7. #7
    penso che netbeans o eclipse faccia poca differenze.
    partiamo da Linux.
    ho installato mysql-connector-c++ dal gestore pacchetti.
    poi nelle oopzioni delle progetto ho aggiunto le opzioni che mi hai detto te.
    infatti nel log della compilazione:
    codice:
    g++ -I/usr/include/cppconn -lmysqlcppconn    -o dist/Debug/GNU-Linux-x86/bancacpplinux build/Debug/GNU-Linux-x86/main.o
    ho qualche differenza però:
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <mysql_driver.h>
    #include <mysql_connection.h>
    
    using namespace sql;
    using namespace std;
    
    int main(int argc, char** argv) {
        Connection *con;
        return 0;
    }
    nn da errori quindi pare vada bene lo stesso!

  8. #8
    più che altro io mi chiedo come sia possibile rendere l'applicazione portabile.
    cioè, una volta fatta e impacchettata devo installare il connettore su tutti i pc dove la voglio usare??

  9. #9
    Ok, quindi a quanto pare ti funziona tutto.

    Controlla levandoli uno alla volta, se c'è qualche include che può essere omesso. In effetti io nel mio file sorgente che mi genera la connessione al database, ho solo questi tre:
    codice:
    #include <driver.h>
    #include <connection.h>
    #include <exception.h>
    E questi non mi sono mai serviti:
    codice:
    #include <mysql_driver.h>
    #include <mysql_connection.h>
    Originariamente inviato da fermat
    più che altro io mi chiedo come sia possibile rendere l'applicazione portabile.
    cioè, una volta fatta e impacchettata devo installare il connettore su tutti i pc dove la voglio usare??
    In effetti questa cosa incuriosisce anche me, però credo che in qualche modo sia possibile integrare questo connector nell'applicazione.

    Faccio alcune prove e ti faccio sapere (compilare a mano il plugin).

  10. #10
    Allora,

    quello che avevo scaricato io era il plugin già compilato, quindi in teoria, per rendere il codice portabile dovrebbe essere semplicemente necessario copiare le directory lib e include nel progetto, e fare la stessa cosa fatta nel caso del plugin installato a livello di sistema. Quindi in teoria bisognerebbe fare come ho cercato di fare sin dall'inizio, solo che si deve settare bene il path agli header e quello che contiene il connector libmysqlcppcon.so.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.