Bonjour,
Effectivement il s'agit pas vraiment de Oracle au sens habituel du terme (le gestionnaire de BDD) mais d'un autre produit de la famille Oracle (permettant également de gérer des "BDD") : Berkeley.
J'aurai jsute voulu un petit coup de main sur la ligne de commande à utiliser pour pouvoir compiler une application faisant appel à cette bibliiothèque sachant que je travaille sous Linux (Fedora 6) avec g++ 4.1.1.
Voici ce que j'ai fait :
1) J'ai téléchargé la version d'évaluation sur leur site web que j'ai décompressé dans un dossier (disons BERKELEY_DECOMPRESS)
2) J'ai suivi la procédure d'installation que j'ai pu trouvé sur le site à savoir, l'éxécution des commandes :
J'ai conçu très rapidement le code suivant (extrait de leur documentation Getting started with Berkeley") :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 configure make make install
MyDb.hpp :
MyDb.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #ifndef MYDB_HEADER #define MYDB_HEADER #include <db_cxx.h> class MyDb { public: // Constructor requires a patho to the database, and a database name. MyDb(std::string &path, std::string &dbName); // Our destructo just calls our private close method ~MyDb() { close(); } inline Db &getDb() {return db_;} private: Db db_; std::string dbFileName_; u_int32_t cFlags_; // Make sure the default constructor is private // We don't want it used MyDb() : db_(NULL, 0) {} // We put our database close activity here. // This is called from our destructor. In // a more complicated example, we might want // to make this method public, but a private // method is more appropriate for this example. void close(); }; #endif
main.c :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 #ifndef MYDB_CPP #define MYDB_CPP #include "MyDb.hpp" // Class constructo. Requires a patho to the location // where the database is located, and a database name MyDb::MyDb(std::string &path, std::string &dbName) : db_(NULL,0), // Instantiate Db object dbFileName_(path + dbName), // Database file name cFlags_(DB_CREATE) // if the database doesn't exists yet, // allow it to be created. { try { // Redirect debuggin information to std::cerr db_.set_error_stream(&std::cerr); // open the databse db_.open(NULL, dbFileName_.c_str(), NULL, DB_BTREE, cFlags_, 0); } // DbException is not a subclass of std::exception, so we // need to catch them both catch(DbException &e) { std::cerr << "Error opening databse: " << dbFileName_ << "\n"; std::cerr << e.what() << std::endl; } catch(std::exception &e) { std::cerr <<"Error opening database: " << dbFileName_ << "\n"; std::cerr << e.what() << std::endl; } } // Pricate member used to close a databse. Called from the class // destructor. void MyDb::close() { // Close the db try { db_.close(0); std::cout<< "Database " << dbFileName_ << "is closed." << std::endl; } catch(DbException &e) { std::cerr << "Error closing database: " << dbFileName_ << "\n"; std::cerr << e.what() << std::endl; } catch(std::exception &e) { std::cerr << "Error closing database: " << dbFileName_ << "\n"; std::cerr << e.what() << std::endl; } } #endif
et mon makefile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #include "MyDb.hpp" int main() { std::string path("mon_chemin/"); std::string dbName("my_db.db"); MyDb db(path,dbName); return 0; }
A l'éxécution de la commande "make" j'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 prefix= BERKELEY_DECOMPRESS/build_unix CXX=g++ CFLAGS=-W -Wall -ansi -pedantic LDFLAGS= -I ${includedir} -L ${libdir} EXEC=getting SRC= main.c MyDb.cpp OBJ= $(SRC:.cpp=.o) all: $(EXEC) $(EXEC): $(OBJ) $(CXX) -o $@ $^ $(LDFLAGS) %.o: %.cpp $(CXX) -o $@ -c $< $(CFLAGS) .PHONY: clean mrproper clean: rm -rf *.o mrproper: clean rm -rf $(EXEC)
A la base dans mon make file j'avais mis comme prefix :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 make g++ -o MyDb.o -c MyDb.cpp -W -Wall -ansi -pedantic g++ -o getting main.c MyDb.o -I /users/n349069/berkley/build_unix -L /users/n349069/berkley/build_unix Dans le fichier inclus à partir de /usr/lib/gcc/i386-redhat-linux/4.1.1/../../../../include/c++/4.1.1/backward/iostream.h:31, à partir de /users/n349069/berkley/build_unix/db_cxx.h:59, à partir de MyDb.hpp:4, à partir de main.c:1: /usr/lib/gcc/i386-redhat-linux/4.1.1/../../../../include/c++/4.1.1/backward/backward_warning.h:32:2: attention : #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. Dans le fichier inclus à partir de MyDb.hpp:4, à partir de main.c:1: /users/n349069/berkley/build_unix/db_cxx.h:60:23: erreur: exception.h : Aucun fichier ou répertoire de ce type /users/n349069/berkley/build_unix/db_cxx.h:1083: erreur: expected class-name before { token make: *** [getting] Erreur 1
(code récupéré d'un makefile de Berkeley).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 /usr/local/berkeley4.XX/include # pour le dossier include /usr/local/berkeley4.XX/lib # pour le dossier lib
Seulement le répertoire mentionné n'existe même pas (doù ma tentative de changement)
Je sais bien que mon post n'est pas forcément évident, mais quelqu'un aurait-il une piste ?
Ou est-ce qu'une personne a déjà utilisé Berkeley sous Linux et comment a-t-il fait pour compiler son application ? (flag à ajouter ? répertoire include / lib spécifique ?)
Merci de m'avoir lu et d'autant plus à quiconque pourra m'aider![]()
Partager