Compilation d'Oracle BerkeleyDB 4.5 avec MinGW

Introduction

La base de données Berkeley DB est embarquée dans de multiples produits Open Source comme OpenLDAP (Annuaire LDAP), Apache Tigris Subversion (gestion des sources).

Cet article présente la compilation de BerkeleyDB 4.5 avec minGW sous Windows, compilation réalisée dans le cadre de l'étude de la mise en place d'une architecture OpenLDAP et Apache Tigris Subversion, 2 produits qui reposent sur BerkeleyDB. minGW est une plateforme de compilation pour Windows avec un environnement Cygwin léger et un environnement bourne shell. Pour plus d'informations à propos de MinGW : Installation de MinGW sousWindows - Minimalist GNU for Windows .

Il existe une version bien plus récente de BerkeleyDB : BerkeleyDB 5.1. Toutefois cette version n'est pas encore opérationnelle pour MinGW et gcc 4.5.0, il demeure des points à résoudre à propos de sockets et des mutex.

Préparation de la compilation

Point de montage /berkeleydb-4.5

MinGW est installé dans le répertoire C:\MinGW. La distribution compilée BerkeleyDB 4.5 sera installée dans le répertoire C:\MinGW\berkeleydb-4.5.

Le répertoire C:\MinGW\berkeleydb-4.5 est d'abord créé puis le point de montage /berkeleydb-4.5 est réalisé dans l'environnement MinGW avec la commande mount ou en éditant directement le fichier /etc/fstab :

sqlpac@MSYS$ mount C:\\mingw\\berkeleydb-4.5  /berkeleydb-4.5

Téléchargement des sources de BerkeleyDB

Les sources Berkeley DB 4.5.20.tar.gz de BerkeleyDB 4.5.20 sont téléchargées depuis le site Oracle (Berkeley DB Release History - Téléchargements). Il s'agit d'une archive compressée. Cette archive est décompressée dans le répertoire /home/compilations/db-4.5.20 :

sqlpac@MSYS$ cd /home/compilations
sqlpac@MSYS$ gunzip db-4.5.20.tar.gz
sqlpac@MSYS$ tar xvf db-4.5.20.tar

Configuration

La configuration est réalisée en se positionnant dans le sous répertoire build_unix des sources et en appelant le script configure localisé dans le répertoire ../dist. L'option --help donne toutes les options de configuration.

sqlpac@MSYS$ cd /home/compilations/db-4.5.20/build_unix

sqlpac@MSYS$ ../dist/configure --help
'configure' configures Berkeley DB 4.5.20 to adapt to many
kinds of systems.

Usage: ../dist/configure [OPTION]... [VAR=VALUE]...
 ...

La ligne de commande pour la configuration est alors la suivante :

sqlpac@MSYS$ cd /home/compilations/db-4.5.20/build_unix

sqlpac@MSYS$ ../dist/configure --prefix=/berkeleydb-4.5 --enable-mingw \
                  --enable-cxx  \
                  LIBCSO_LIBS=-lwsock32 \
                  LIBXSO_LIBS=-lwsock32 > cfg45.log 2>&1
  • L'option --prefix=/berkeleydb-4.5 indique le répertoire d'installation de la distribution compilée.
  • L'option --enable-mingw est disponible dans la configuration de BerkeleyDB pour spécifier qu'il s'agit d'une compilation avec MinGW.
  • L'option --enable-cxx active la création de la librairie des API C++ pour Berkeley DB.

2 options de compilations sont forcées : LIBCSO_LIBS=-lwsock32 et LIBXSO_LIBS=-lwsock32.

LIBCSO_LIBS et LIBXSO_LIBS basculent respectivement la compilation des API C et C++ (--enable-cxx) pour les sockets vers celles de wsock32. Dans le cas contraire, la compilation make aboutit à l'erreur ci-dessous :

Creating library file: .libs/libdb-4.5.dll.a
 .libs/os_errno.o:os_errno.c:(.text+0x3f): undefined reference to `WSAGetLastError@0'
 .libs/os_errno.o:os_errno.c:(.text+0x54): undefined reference to `WSASetLastError@4'
collect2: ld returned 1 exit status
make: *** [libdb-4.5.la] Error 1

Compilation et installation (make, make install)

Compilation (make)

La compilation est lancée avec la commande classique make

sqlpac@MSYS$ cd /home/compilations/db-4.5.20/build_unix

sqlpac@MSYS$ make > makebdb45.log 2>&1

Installation de la distribution compilée (make install)

La commande make install installe la distribution compilée dans /berkeleydb-4.5 (option --prefix de la commande configure)

sqlpac@MSYS$ cd /home/compilations/db-4.5.20/build_unix

sqlpac@MSYS$ make install > makebdb45.install.log 2>&1 

Distribution BerkeleyDB 4.5

La distribution BerkleyDB 4.5 est dès lors disponible dans /berkeleydb-4.5 ($BERKELEYDB_HOME).

Les librairies dynamiques et programmes sont installés dans $BERKELEYDB_HOME/bin :

BerkeleyDB 4.5
  • db_archive.exe
  • db_checkpoint.exe
  • db_deadlock.exe
  • db_dump.exe
  • db_hotbackup.exe
  • db_load.exe
  • db_printlog.exe
  • db_recover.exe
  • db_stat.exe
  • db_upgrade.exe
  • db_verify.exe
  • libdb-4.5.dll
  • libdb_cxx-4.5.dll (API C++)

Les fichiers librairies *.a sont installés dans $BERKELEYDB_HOME/lib, ils sont nécessaires pour compiler OpenLDAP et d'autres outils utilisant BerkeleyDB : libdb-4.5.a, libdb-4.5.dll.a, libdb.a, libdb_cxx-4.5.a, libdb_cxx-4.5.dll.a, libdb_cxx.a.