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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
configure
make
make install
J'ai conçu très rapidement le code suivant (extrait de leur documentation Getting started with Berkeley") :
MyDb.hpp :
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
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
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
main.c :
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;
}
et mon makefile :
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 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
 
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
A la base dans mon make file j'avais mis comme prefix :
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
(code récupéré d'un makefile de Berkeley).
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