OVH Cloud OVH Cloud

C++ et librairie sqlite3

14 réponses
Avatar
Delf
Bonjour à tous.

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

Stop in /usr/home/delf/sercker/src.

Mon Makefile de warrior est tout bête :

[18:06][delf@freaker src]# cat Makefile
program.out: main.o SqliteWrapper.o
g++ -o program.out main.o SqliteWrapper.o
main.o: main.cpp SqliteWrapper.h
g++ -c main.cpp
SqliteWrapper.o: SqliteWrapper.cpp SqliteWrapper.h
g++ -c SqliteWrapper.cpp

Je ne comprends pas le message : undefined reference to `sqlite3_open'

Si quelqu'un pouvait m'aider...
Merci anticipé.

--
Delf
Do not use this email in Cc!
L'alcool tue lentement. On s'en fout. On n'est pas pressé.

4 réponses

1 2
Avatar
Delf

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/


+ libsqlite3.so dans libs/
+ lien libsqlite3.so -> libsqlite3.so.8 dans libs/

--
Delf

Avatar
Delf

[...]


[13:07][ libs]# strings libsqlite3.so | grep sqlite3_open
sqlite3_open
sqlite3_open16
sqlite3_opentemp_count

--
Delf

Avatar
Gilles Civario
Delf wrote:

[...]


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"

4. le Makefile :

program.out: main.o SqliteWrapper.o
g++ -o program.out main.o SqliteWrapper.o
main.o: main.cpp SqliteWrapper.h
g++ -c main.cpp
SqliteWrapper.o: SqliteWrapper.cpp SqliteWrapper.h
g++ -I../include -L../libs -c SqliteWrapper.cpp -lsqlite3


Ce n'est pas là qu'il fait mettre -lsqlite3, mais dans program.out:
g++ -o program.out main.o SqliteWrapper.o -L../libs -lsqlite3



5. je lance la compilation :

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




Avatar
Delf

Ce n'est pas là qu'il fait mettre -lsqlite3, mais dans program.out:
g++ -o program.out main.o SqliteWrapper.o -L../libs -lsqlite3


Ahhhh !! (pétage de plomb !)
Merci =)

--
Delf

1 2