-lsqlite3 avec des .so - C - Programmation
Marsh Posté le 14-05-2008 à 16:47:45
Bon j'ai essayé en rajoutant -L devant /usr/lib/......
mais le compilateur rale, il fait comme si je lui avais pas donné de librairie
Marsh Posté le 14-05-2008 à 18:05:50
Mais, heu, tu ne peux pas utiliser les dll compilées comme des fichiers objets à la compilation. Il te faut un .a, qui se trouve normallement dans le package de développement associé à ta lib.
Marsh Posté le 15-05-2008 à 09:23:23
Normalement tu devrais simplement mettre -lsqlite3, comme ça :
gcc -o meteo meteo.c -lpthread -lsqlite3 |
Et ça va te linker avec /usr/lib/libsqlite3.so
Marsh Posté le 15-05-2008 à 20:28:29
hello, malheureusement non le -lsqlite3 n'est pas trouvé ... et je ne trouve pas de .a dans la distrib, je pense qu'il faut que recompile tout pour faire un point a .... ya bien un truc plus simple quand meme.
Marsh Posté le 15-05-2008 à 20:50:47
Oui, il y a plus simple: tu télécharges le package développement de sqlite3, de ta distrib. Les distribs linusques ne les installes pas, car 99.9% des gens en ont rien à foutre et que ça bouffe parfois beaucoup de place.
Marsh Posté le 15-05-2008 à 23:38:29
Tu n'as pas besoin de .a, un .so fait parfaitement l'affaire. Un .a c'est juste une "archive" qui contient un ou plusieurs .so.
Sinon tu es sûr que tu as bien essayé "-lsqlite3" ? Je demande parce que dans ton post initial tu n'as de -l que devant "pthread"... Il en faut un devant chaque lib.
Tant que tu y es, donne la commande exacte que tu lances, et les messages exacts que tu optiens.
tpierron, le .so vient avec le package de développement. Il n'y a pas de .a. On n'y a pas besoin d'un .a.
Marsh Posté le 16-05-2008 à 13:51:46
Alors sans ça donne ça ... normal :
[root@localhost compil]# gcc-cris -mlinux -mno-mul-bug-workaround -o CRISmeteo main2501.c serialposix.c -lpthread
/root/tmp/ccs2Gw3m.o: In function `insertion_data':
/root/tmp/ccs2Gw3m.o(.text+0x250): undefined reference to `sqlite3_open'
/root/tmp/ccs2Gw3m.o(.text+0x28e): undefined reference to `sqlite3_exec'
/root/tmp/ccs2Gw3m.o(.text+0x2b6): undefined reference to `sqlite3_close'
/root/tmp/ccs2Gw3m.o: In function `main':
/root/tmp/ccs2Gw3m.o(.text+0xd6a): undefined reference to `sqlite3_open'
/root/tmp/ccs2Gw3m.o(.text+0xd88): undefined reference to `sqlite3_exec'
/root/tmp/ccs2Gw3m.o(.text+0xdb0): undefined reference to `sqlite3_close'
collect2: ld returned 1 exit status
AVEC :
[root@localhost compil]# gcc-cris -mlinux -mno-mul-bug-workaround -o CRISmeteo main2501.c serialposix.c -lpthread /usr/lib/libsqlite32.so /usr/lib/libsqlite3.so
/usr/lib/libsqlite32.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
Marsh Posté le 16-05-2008 à 13:53:21
OU : (avec -lsqlite3)
[root@localhost compil]# gcc-cris -mlinux -mno-mul-bug-workaround -o CRISmeteo main2501.c serialposix.c -lpthread -lsqlite3
/usr/local/cris/lib/gcc-lib/cris-axis-linux-gnu/3.2.1/../../../../cris-axis-linux-gnu/bin/ld: cannot find -lsqlite3
collect2: ld returned 1 exit status
[root@localhost compil]#
Marsh Posté le 16-05-2008 à 14:10:57
Bon voila je sais pourquoi,
Les libraires n'ont pas été compilées avec gcc-cris ......
Il faut donc que je recompile sqlite .... alorsla je vais galérer les makefiles c'est pas mon truc ...
Marsh Posté le 16-05-2008 à 15:19:40
matafan a écrit : tpierron, le .so vient avec le package de développement. Il n'y a pas de .a. On n'y a pas besoin d'un .a. |
Gné ?! Un .a est une archive de fichiers object (.o) et pas de .so. C'est ce module qui va faire la liaison entre ton programme et la dll. Alors c'est sur, tu peux t'en passer, mais alors tu dois tout faire à la main : OpenLibrary, GetProcAddress. Sous windows, il est possible de reconstuire les .a à partir des .dll et d'un fichier de définition, pas sur que ça soit faisable sous Linux.
Sinon, généralement dans le package devel, tu as les includes et le fameux .a qui pointe vers la dll de TON système, compilé avec la même version de gcc, pour être sûr d'avoir la même ABI (d'autant tu as l'air d'utiliser un autre compilo que celui en standard).
Si tu tiens vraiment à compiler sqlite à la main, il y a un script configure fournit (qui va utiliser gcc par défaut, pas ton gcc-cris). Sinon, sur le site de sqlite, il fournisse une archive contenant UN fichier .c qui contient tout le code de sqlite3 : tu peux le compiler à la main en une seule ligne de commande.
Marsh Posté le 16-05-2008 à 15:54:57
Ba c'est pas que j'y tiens, je n'ai pas vrement le choix, mais vu la tete du makefile a mon avis une simple ligne n suffit pas ....
gcc-cris -o sqlite3 sqlite3.c shell.c ... nannnn
Marsh Posté le 16-05-2008 à 16:38:09
parilla77 a écrit : Ba c'est pas que j'y tiens, je n'ai pas vrement le choix, mais vu la tete du makefile a mon avis une simple ligne n suffit pas .... |
Faut lire un tout petit peu la doc quand même. Primo, récupère cette archive :
http://www.sqlite.org/sqlite-amalgamation-3.5.9.tar.gz
Il y a un seul fichier intéressant là dedans : sqlite3.c, c'est le seul à compiler. shell.c est l'interface en ligne de commande de sqlite3. Pour générer la dll, tu n'as besoin que de sqlite3.c
Marsh Posté le 21-05-2008 à 17:16:29
Bé ok !
alors quelle serait ma ligne de compil ?? ( pour glibc )
parce que gcc-cris -mlinux -o sqlite3 sqlite3.c -lpthread
undefined reference to main
peux tu m'aider stp ?
merci
Marsh Posté le 21-05-2008 à 19:33:50
Bah, commence déjà avec une lib statique :
gcc -c sqlite3.c
Ta lib statique sera sqlite3.o (comme il n'y a qu'un fichier, pas besoin de générer un .a). Compile ensuite ton autre programme, si ça marche tu pourras tenter une lib dynamique.
Marsh Posté le 23-05-2008 à 08:28:54
meme erreur qu'avec gcc-cris :
[parilla77@localhost sqlite]$ gcc -o sqlite3 sqlite3.c -lpthread
sqlite3.c: In function ‘sqlite3OsDefaultVfs’:
sqlite3.c:19697: attention : initialization from incompatible pointer type
sqlite3.c:19698: attention : initialization from incompatible pointer type
sqlite3.c:19700: attention : initialization from incompatible pointer type
/usr/lib/gcc/i586-manbo-linux-gnu/4.2.3/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld a retourné 1 code d'état d'exécution
[parilla77@localhost sqlite]$
Ou des warnings sans edition des liens :
[parilla77@localhost sqlite]$ gcc -c sqlite3.c
sqlite3.c: In function ‘sqlite3OsDefaultVfs’:
sqlite3.c:19697: attention : initialization from incompatible pointer type
sqlite3.c:19698: attention : initialization from incompatible pointer type
sqlite3.c:19700: attention : initialization from incompatible pointer type
[parilla77@localhost sqlite]$
Marsh Posté le 23-05-2008 à 22:16:11
en compilant avec gcc-cris et le nouveau .o compilé grace à gcc-cris :
gcc-cris -mlinux -o CRISmeteo main1405.c serialposix.c sqlite3.o -lpthread
pas de souci à la compil, mais quand je lance le prog j'ai une erreur de segmentation, sans doute du au problemes lors de la compil de sqlite.c avec gcc-cris.
Marsh Posté le 26-05-2008 à 15:05:03
Je ne saurais pas te dire qu'est ce qui merde. Ça à l'air d'être spécifique à ton environnement. Essaye de compiler shell.c avec sqlite3.c pour obtenir un executable. Lance le et vois si ça plante aussi. Essaye aussi d'obtenir un backtrace du programme qui plante (lance gdb et quand tu as le SIGSEGV, entre la commande "bt" ).
Marsh Posté le 26-05-2008 à 17:14:01
gdb sur le pinguin .... aie bon je vais essayer d'installer ça
Marsh Posté le 26-05-2008 à 20:26:26
Bah si tu n'as pas gdb, essaie déjà de compiler sqlite3 pour obtenir l'interface en ligne de commande. Si ça plante aussi, c'est qu'il y a certainement un problème avec ton environnement.
J'arrive à compiler le fichier, les seuls warnings que j'ai sont des variables qui pourraient être utilisées avec d'être initialisés (avec -Wall et -O2), certainement des faux positifs.
Marsh Posté le 14-05-2008 à 15:34:04
Bonjour,
Je veux compiler un programme avec gcc-cris ma ligne de compil avec gcc :
gcc -o meteo meteo.c -lpthread /usr/lib/libsqlite3.so.0 /usr/lib/libsqlite3.so.0.8.6
maintenant gcc-cris n'accepte pas les librairies partagées comme ça, donc ma question peut etre nul .......
Comment faire un -lsqlite3 à partir de mes 2 lib ?
Merci