2009-08-26 9 views
2

Je construis une application en C++ qui utilise sqlite3 comme base de données intégrée. La source de sqlite3 est distribuée sous la forme d'un fichier de code source fusionné sqlite3.c et de deux fichiers d'en-tête. Quels sont les avantages ou les inconvénients relatifs de lier le code sqlite3 directement dans mon programme binaire par rapport à la compilation de sqlite3 comme une bibliothèque statique et de le lier de cette façon?Dois-je lier sqlite3 en tant que code objet brut ou en tant que bibliothèque statique dans une application C++?

J'ai déjà décidé de ne pas lier le code sqlite3 en tant que bibliothèque dynamique.

Répondre

3

Cela ne fait vraiment pas beaucoup de différence.
En supposant que vous ayez une sorte d'environnement makefile, le sqlite.c ne sera construit qu'une seule fois si vous ne changez rien et que l'éditeur de liens va combiner le fichier objet de la même manière que de brancher une bibliothèque statique.

2

La bibliothèque statique est compilée dans votre programme. Le code de liaison est directement compilé dans votre programme. Donc, il semble que c'est en fait la même chose :) Il pourrait être plus facile de gérer le projet si vous le liez en tant que bibliothèque statique puisque vous aurez moins de fichiers sources. D'un autre côté, si vous devez apporter des modifications rapides aux fichiers source de la bibliothèque, il ne sera pas nécessaire de reconstruire la bibliothèque statique. En fin de compte, c'est à vous de décider.

0

Voici une manière d'inclure sqlite3 dans votre bibliothèque, sans inclure aucun des symboles dans votre bibliothèque:

#define SQLITE_API static 
#include <sqlite.h> 
#include <sqlite.c> 

Ensuite, vous êtes assuré de ne pas entrer en conflit avec d'autres implémentations de SQLite que les utilisateurs de votre bibliothèque pourrait lier avec.

Questions connexes