Je commence un projet en C++ qui va utiliser sqlite 3.3.5. Je me fais
donc un p'tit programme pour me faire la main avant de commencer.
J'ai récupéré les sources, je les ai compilés mais je n'ai pas installé
sqlite sur mon système. Je ne veux pas installer sqlite, juste pouvoir
utiliser la librairie. Première question, possible ?
Arborescence:
project/
|--libs/
|--src/
J'ai mis libsqlite3.so.8 et sqlite3.h dans libs. Une de mes classes
(dans src) utilise sqlite3.h
#include "../libs/sqlite3.h"
Quand je compile, j'obtiens les messages suivants :
[18:11][delf@freaker src]# make
g++ -c SqliteWrapper.cpp
g++ -o program.out main.o SqliteWrapper.o
SqliteWrapper.o(.text+0x165): In function
`sercker::wrappers::CSqliteWrapper::Function() const':
: undefined reference to `sqlite3_open'
*** Error code 1
Je ne comprends pas le message : undefined reference to `sqlite3_open'
C'est parce que, comme tu le dis toi-même, tu ne lui indiques pas d'utiliser la bibliothèque qui contient cette fonction dans ta ligne d'édition de liens.
Comment préciser au compilateur d'utiliser la libsqlite3 qui se situe dans le répertoire libs/
(si la bibliothèque s'appelle libsqlite3.so et est rangée dans /path/to/directory/libs)
Sinon, man gcc, tout ça... -- Rémi Moyen
Delf wrote:
Je ne comprends pas le message : undefined reference to `sqlite3_open'
C'est parce que, comme tu le dis toi-même, tu ne lui indiques pas
d'utiliser la bibliothèque qui contient cette fonction dans ta ligne
d'édition de liens.
Comment préciser au compilateur d'utiliser la libsqlite3 qui se situe
dans le répertoire libs/
Je ne comprends pas le message : undefined reference to `sqlite3_open'
C'est parce que, comme tu le dis toi-même, tu ne lui indiques pas d'utiliser la bibliothèque qui contient cette fonction dans ta ligne d'édition de liens.
Comment préciser au compilateur d'utiliser la libsqlite3 qui se situe dans le répertoire libs/
Des chemins relatifs ne me semblent pas le plus solide, comme manière de faire. Mais bon, ça ne devrait pas poser de problème, pour autant que je sache.
include/ contient sqlite3.h libs/ contient libsqlite3.so.8 & libsqlite3.a (je ne sais pas s'il faut les 2...)
Il me semble que -ltoto va chercher libtoto.so ou libtoto.a (mais j'ai la flemme de lire le man pour vérifier), donc ça devrait être bon (puisqu'il y a le .a).
Ceci dit, essaye de rajouter un lien libsqlite3.so -> libsqlite3.so.8 (comme ça, il trouvera le .so). -- Rémi Moyen
Des chemins relatifs ne me semblent pas le plus solide, comme manière de
faire. Mais bon, ça ne devrait pas poser de problème, pour autant que je
sache.
include/ contient sqlite3.h
libs/ contient libsqlite3.so.8 & libsqlite3.a (je ne sais pas s'il faut
les 2...)
Il me semble que -ltoto va chercher libtoto.so ou libtoto.a (mais j'ai
la flemme de lire le man pour vérifier), donc ça devrait être bon
(puisqu'il y a le .a).
Ceci dit, essaye de rajouter un lien libsqlite3.so -> libsqlite3.so.8
(comme ça, il trouvera le .so).
--
Rémi Moyen
Des chemins relatifs ne me semblent pas le plus solide, comme manière de faire. Mais bon, ça ne devrait pas poser de problème, pour autant que je sache.
include/ contient sqlite3.h libs/ contient libsqlite3.so.8 & libsqlite3.a (je ne sais pas s'il faut les 2...)
Il me semble que -ltoto va chercher libtoto.so ou libtoto.a (mais j'ai la flemme de lire le man pour vérifier), donc ça devrait être bon (puisqu'il y a le .a).
Ceci dit, essaye de rajouter un lien libsqlite3.so -> libsqlite3.so.8 (comme ça, il trouvera le .so). -- Rémi Moyen
Le -lsqlite3 doit se trouver *après* les modules qui en ont besoin. Ici, le déplacer, pour le mettre tout à la fin.
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- fgu> Je reviens sur mon post de 11h27 : Au lieu de :"2ème DD en fgu> Secondary Master (SM)" ce serait plutôt : "2ème DD en Primary Slave fgu> (PS)" -+-Guide du Neuneu d'Usenet-La dialectique du maître et de l'esclave -+- ---559023410-684387517-1144649872=:11051--
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Le -lsqlite3 doit se trouver *après* les modules qui en ont besoin.
Ici, le déplacer, pour le mettre tout à la fin.
--
Erwann ABALEA <erwann@abalea.com> - RSA PGP Key ID: 0x2D0EABD5
-----
fgu> Je reviens sur mon post de 11h27 : Au lieu de :"2ème DD en
fgu> Secondary Master (SM)" ce serait plutôt : "2ème DD en Primary Slave
fgu> (PS)"
-+-Guide du Neuneu d'Usenet-La dialectique du maître et de l'esclave -+-
---559023410-684387517-1144649872=:11051--
Le -lsqlite3 doit se trouver *après* les modules qui en ont besoin. Ici, le déplacer, pour le mettre tout à la fin.
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- fgu> Je reviens sur mon post de 11h27 : Au lieu de :"2ème DD en fgu> Secondary Master (SM)" ce serait plutôt : "2ème DD en Primary Slave fgu> (PS)" -+-Guide du Neuneu d'Usenet-La dialectique du maître et de l'esclave -+- ---559023410-684387517-1144649872=:11051--
Le -lsqlite3 doit se trouver *après* les modules qui en ont besoin. Ici, le déplacer, pour le mettre tout à la fin.
Tu m'as fait douter, alors j'ai testé :-)
Chez moi (Debian/testing, g++ 4.0.3), la position du -ltoto ne change strictement rien. La ligne de compilation telle qu'indiquée fonctionne (enfin, j'ai pas essayé avec libsqlite3 que je connais pas, mais avec une autre lib et c'est pareil). -- Rémi Moyen
Le -lsqlite3 doit se trouver *après* les modules qui en ont besoin.
Ici, le déplacer, pour le mettre tout à la fin.
Tu m'as fait douter, alors j'ai testé :-)
Chez moi (Debian/testing, g++ 4.0.3), la position du -ltoto ne change
strictement rien. La ligne de compilation telle qu'indiquée fonctionne
(enfin, j'ai pas essayé avec libsqlite3 que je connais pas, mais avec
une autre lib et c'est pareil).
--
Rémi Moyen
Le -lsqlite3 doit se trouver *après* les modules qui en ont besoin. Ici, le déplacer, pour le mettre tout à la fin.
Tu m'as fait douter, alors j'ai testé :-)
Chez moi (Debian/testing, g++ 4.0.3), la position du -ltoto ne change strictement rien. La ligne de compilation telle qu'indiquée fonctionne (enfin, j'ai pas essayé avec libsqlite3 que je connais pas, mais avec une autre lib et c'est pareil). -- Rémi Moyen
Rémi Moyen
J'ai testé aussi, apparemment ça ne change rien, j'ai toujours cette erreur.
Chez moi (Debian/testing, g++ 4.0.3), la position du -ltoto ne change strictement rien. La ligne de compilation telle qu'indiquée fonctionne (enfin, j'ai pas essayé avec libsqlite3 que je connais pas, mais avec une autre lib et c'est pareil).
J'ai testé aussi, apparemment ça ne change rien, j'ai toujours cette erreur.
-- Delf Do not use this email in Cc!
Rémi Moyen wrote:
Chez moi (Debian/testing, g++ 4.0.3), la position du -ltoto ne change
strictement rien. La ligne de compilation telle qu'indiquée fonctionne
(enfin, j'ai pas essayé avec libsqlite3 que je connais pas, mais avec
une autre lib et c'est pareil).
J'ai testé aussi, apparemment ça ne change rien, j'ai toujours cette erreur.
Chez moi (Debian/testing, g++ 4.0.3), la position du -ltoto ne change strictement rien. La ligne de compilation telle qu'indiquée fonctionne (enfin, j'ai pas essayé avec libsqlite3 que je connais pas, mais avec une autre lib et c'est pareil).
J'ai testé aussi, apparemment ça ne change rien, j'ai toujours cette erreur.
-- Delf Do not use this email in Cc!
Delf
As-tu essayé le lien symbolique libsqlite3.so -> libsqlite3.so.8 ?
Oops : A tester ce soir. Sinon, je peux renommer le .so non ?
-- Delf
As-tu essayé le lien symbolique libsqlite3.so -> libsqlite3.so.8 ?
Oops : A tester ce soir. Sinon, je peux renommer le .so non ?
As-tu essayé le lien symbolique libsqlite3.so -> libsqlite3.so.8 ?
Oops : A tester ce soir. Sinon, je peux renommer le .so non ?
-- Delf
Delf
[...]
Je commence à me poser des questions là...
Je refais un récapitulatif de la situation actuelle (je vais péter un plomb) :
L'arborescence du projet
projet |-- include/ |-- libs/ |-- src/
1. j'ai compilé sqlite-3.3.5 (non installé sur le système) 2. j'ai récupéré: - le libsqlite3.so.8 -> mis dans libs/ - le libsqlite3.a -> mis dans libs/ - le sqlite3.h -> mis dans include/ 3. le fichier SqliteWrapper.cpp contient - #include "../include/sqlite3.h"
[12:22][ src]# make g++ -c main.cpp g++ -I../include -L../libs -c SqliteWrapper.cpp -lsqlite3 g++: -lsqlite3: linker input file unused because linking not done g++ -o program.out main.o SqliteWrapper.o SqliteWrapper.o(.text+0x165): In function `sercker::wrappers::CSqliteWrapper::Function() const': : undefined reference to `sqlite3_open' *** Error code 1
Stop in /usr/home/delf/sercker/src.
Je ne sais plus quoi faire... tout me semble bon portant. Y a-t-il un outil pour visualiser les fonctions d'une lib ?
Merci anticipé.
-- Delf
[...]
Je commence à me poser des questions là...
Je refais un récapitulatif de la situation actuelle (je vais péter un
plomb) :
L'arborescence du projet
projet
|-- include/
|-- libs/
|-- src/
1. j'ai compilé sqlite-3.3.5 (non installé sur le système)
2. j'ai récupéré:
- le libsqlite3.so.8 -> mis dans libs/
- le libsqlite3.a -> mis dans libs/
- le sqlite3.h -> mis dans include/
3. le fichier SqliteWrapper.cpp contient
- #include "../include/sqlite3.h"
Je refais un récapitulatif de la situation actuelle (je vais péter un plomb) :
L'arborescence du projet
projet |-- include/ |-- libs/ |-- src/
1. j'ai compilé sqlite-3.3.5 (non installé sur le système) 2. j'ai récupéré: - le libsqlite3.so.8 -> mis dans libs/ - le libsqlite3.a -> mis dans libs/ - le sqlite3.h -> mis dans include/ 3. le fichier SqliteWrapper.cpp contient - #include "../include/sqlite3.h"