PDA

View Full Version : [C] problema applicazione.C su mysql


yoghi87
10-05-2009, 17:29
Ciao, ho installato mysql da .tar.gz come indicato dal manuale ufficiale, cosi mi ritrovo le librerie al posto giusto ora il problema è compilare e usare un'applicazione scritta in C:

gcc -c -I/usr/local/mysql/include example.c

e mi compila il file oggetto

gcc -g -o example example.o -L/usr/local/mysql/lib -lmysqlclient -lz

e mi crea l'eseguibile example.

Però ora provo a lanciare ./example e mi ritrovo:

./example: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory


Perchè???

DanieleC88
10-05-2009, 19:03
Questa applicazione andava più nella sezione Linux che qui, ma vabbe'... :)
Il fatto è che /usr/local/lib al 99% non è incluso in /etc/ld.so.conf, e al caricamento dell'eseguibile non vengono trovati i simboli esterni necessari.
Aggiungilo e poi dai un ldconfig come superutente. :)

yoghi87
11-05-2009, 20:05
ho provato ma niente come prima... stesso errore...

DanieleC88
11-05-2009, 21:13
Eh no, se le librerie sono installate correttamente e hai fatto come ti ho detto, deve funzionare. :D

Ricapitoliamo:

prendi il tuo eseguibile, diciamo che è "./exe", e dai un "ldd ./exe" per controllare che tutti i riferimenti esterni siano risolti
se non lo sono, trova dove sono state installate le librerie richieste
aggiungi il percorso appena trovato ad /etc/ld.so.conf
lancia - come superutente - il comando "ldconfig"
torna al punto 1


ciao ;)

yoghi87
12-05-2009, 18:42
se dò quel comando ricevo:

ldd ./example
linux-gate.so.1 => (0xb809d000)
libmysqlclient.so.16 => not found
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7f29000)
/lib/ld-linux.so.2 (0xb809e000)

DanieleC88
12-05-2009, 18:46
libmysqlclient.so.16 => not found
Esattamente quello che dicevo. :)
La cosa è strana se hai aggiunto il percorso e rigenerato la cache, controlla che effettivamente il file esista nella cartella.

yoghi87
12-05-2009, 20:06
perchè mi fà cosi il file libmysqlclient.so.16 è dentro /usr/local/mysql/lib ma quando compilo mi continua a dire:
./ciao: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory

il file ld.so.con lo modificato aggiungendo il percorso ora è cosi formato:
include /etc/ld.so.conf.d/*.conf
include /usr/local/mysql/lib

Cosa posso fare per far funzionare queste applicazioni in C???????:muro:

DanieleC88
12-05-2009, 20:22
Azz, no, togli l'include della seconda riga (quello della prima riga va bene)... Poi lancia di nuovo ldconfig e vedrai che funzionerà perfettamente... ;)

yoghi87
13-05-2009, 17:23
in che riga c'è l'include????:confused:

yoghi87
13-05-2009, 17:41
OK grazie Mille ho risolto era solo da creare link simbolici nella cartella /usr/lib dei file libmysqlclient.so.16 e libmysqlclient.so

Grazie!!! :D

DanieleC88
13-05-2009, 17:50
Una soluzione abbastanza rozza, ma vabbe'... :D
Comunque era nella seconda riga, dovevi solo togliere "include" e avevi risolto.

ciao ciao ;)