2017-01-15 2 views
0

J'utilise Code :: Blocks IDE pour mon projet.Bibliothèque Sqlite3 donnant une erreur de thread même si j'utilise l'option -lpthread

Jusqu'à présent, je téléchargé les fichiers amalgamation sqlite3, installées en utilisant make install et Linked la bibliothèque libsqlite3.a à mon projet avec projet ->Options de construction ->paramètres de l'éditeur de liens et a ajouté le libslite3. un fichier.

Maintenant, quand j'essaie de construire mon projet, je reçois des erreurs comme undefined reference to pthread_mutex_trylock ou undefined reference to pthread_create.

J'ai inclus pthread, thread, mutex têtes dans mon principal, j'ai ajouté l'option -lpthread et pthread alternativement dans le projet ->options de construction ->autres options copiler et encore je reçois la même erreur .

Répondre

1

-l<library> est l'option de liaison, pas une option de compilateur, donc dans Code :: Blocks il va dans les Autres options de l'éditeur de liens

Suppression -lpthread des options du compilateur et l'ajouter à l'éditeur de liens options probablement être suffisant.

Cependant la bonne façon, portable, pour permettre pthreads multithreading dans GCC est d'ajouter l'option -pthread (non -lpthread) à fois les options du compilateur: -

projet ->Options de construction -> paramètres du compilateur ->Autres options du compilateur

et l'éditeur de liens optio ns:

projet ->Options de construction ->Linker paramètres ->Autres options de l'éditeur de liens

Cette option indique à la fois le compilateur de faire les bonnes choses à générer pthreads code conforme et indique au lieur de faire les bonnes choses pour le lier avec la bibliothèque de threads POSIX de la plate-forme hôte.

Pour utiliser pthreads dans votre programme, #include <pthreads.h>

+0

Le projet prend appui si je Liez le fichier sqlite3.so au lieu du fichier .a. Est-il suffisant? Votre solution fonctionne, mais maintenant j'ai une référence indéfinie à dlerror, que je ne peux pas corriger si je lie aussi -dl en tant qu'option dans les options de l'éditeur de liens –

+0

'libsqite3.so' est correct. Utilisez simplement '-lsqlite3' dans ** Autres options de l'éditeur de liens ** et l'éditeur de liens choisira' .so' de préférence. Vous devrez indiquer son chemin dans ** Répertoires de recherche ** -> ** Lieur ** si votre 'libsqlite3.so' ne se trouve pas dans l'un des répertoires lib par défaut'/usr/lib', '/ usr/local/lib' –