Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
717 connectés 

  FORUM HardWare.fr
  Programmation
  C

  -lsqlite3 avec des .so

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

-lsqlite3 avec des .so

n°1731805
parilla77
Posté le 14-05-2008 à 15:34:04  profilanswer
 

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

mood
Publicité
Posté le 14-05-2008 à 15:34:04  profilanswer
 

n°1731864
parilla77
Posté le 14-05-2008 à 16:47:45  profilanswer
 

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

n°1731939
tpierron
Posté le 14-05-2008 à 18:05:50  profilanswer
 

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.

n°1732056
matafan
Posté le 15-05-2008 à 09:23:23  profilanswer
 

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

n°1732403
parilla77
Posté le 15-05-2008 à 20:28:29  profilanswer
 

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.

n°1732413
tpierron
Posté le 15-05-2008 à 20:50:47  profilanswer
 

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.

n°1732476
matafan
Posté le 15-05-2008 à 23:38:29  profilanswer
 

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.

Message cité 1 fois
Message édité par matafan le 15-05-2008 à 23:39:47
n°1732697
parilla77
Posté le 16-05-2008 à 13:51:46  profilanswer
 

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
 
 
 
 

n°1732701
parilla77
Posté le 16-05-2008 à 13:53:21  profilanswer
 

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]#

n°1732716
parilla77
Posté le 16-05-2008 à 14:10:57  profilanswer
 

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 ...

mood
Publicité
Posté le 16-05-2008 à 14:10:57  profilanswer
 

n°1732762
tpierron
Posté le 16-05-2008 à 15:19:40  profilanswer
 

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é [:pingouino] ?! 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.

n°1732792
parilla77
Posté le 16-05-2008 à 15:54:57  profilanswer
 

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

n°1732824
tpierron
Posté le 16-05-2008 à 16:38:09  profilanswer
 

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 ....
 
gcc-cris -o sqlite3 sqlite3.c shell.c ... nannnn


 
[:prozac]
 
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
 

n°1735332
parilla77
Posté le 21-05-2008 à 17:16:29  profilanswer
 

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


Message édité par parilla77 le 21-05-2008 à 17:17:00
n°1735370
tpierron
Posté le 21-05-2008 à 19:33:50  profilanswer
 

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.

n°1735983
parilla77
Posté le 23-05-2008 à 08:28:54  profilanswer
 

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]$                


Message édité par parilla77 le 23-05-2008 à 08:31:12
n°1736506
parilla77
Posté le 23-05-2008 à 22:16:11  profilanswer
 

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.

n°1737223
parilla77
Posté le 26-05-2008 à 14:37:40  profilanswer
 

up ?

n°1737241
tpierron
Posté le 26-05-2008 à 15:05:03  profilanswer
 

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" ).

n°1737314
parilla77
Posté le 26-05-2008 à 17:14:01  profilanswer
 

gdb sur le pinguin .... aie bon je vais essayer d'installer ça

n°1737401
tpierron
Posté le 26-05-2008 à 20:26:26  profilanswer
 

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.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  -lsqlite3 avec des .so

 

Sujets relatifs
Plus de sujets relatifs à : -lsqlite3 avec des .so


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR