2017-01-15 1 views
0

Ich verwende Code :: Blocks IDE für mein Projekt.Sqlite3-Bibliothek gibt Thread-Fehler, obwohl mit -lpthread Option

Bisher habe ich heruntergeladen die sqlite3 Zusammenlegung Dateien, installiert sie mit Projektmake install und verknüpft die libsqlite3.a Bibliothek zu meinem Projekt mit ->Build-Optionen ->Linker-Einstellungen und hinzugefügt, um die libslite3. eine Datei. Wenn ich versuche, mein Projekt zu erstellen, bekomme ich einige Fehler wie undefined reference to pthread_mutex_trylock oder undefined reference to pthread_create.

Ich habe pthread enthalten, thread, mutex Header in meinem Haupt, habe ich die Möglichkeit, -lpthread und pthread alternativ im Projekt ->Build-Optionen ->andere copiler Optionen und ich immer noch die gleichen Fehler .

Antwort

1

-l<library> ist Linker-Option, nicht eine Compiler-Option, so in Code :: Blocks geht es in den Andere Linker-Optionen wird

-lpthread aus den Compiler-Optionen entfernen und es an den Linker Optionen hinzugefügt wahrscheinlich ausreichen.

jedoch die richtige, tragbar, Art und Weise pthreads Multithreading in GCC zu ermöglichen, ist die Option -pthread (nicht -lpthread) zu sowohl die Compiler-Optionen hinzuzufügen: -

Projekt ->Build-Optionen ->Compiler-Einstellungen ->Andere Compiler-Optionen

und die Linker Optio ns:

Projekt ->Build-Optionen ->Linkers Einstellungen ->Andere Linker-Optionen

Diese Option weist sowohl der Compiler die richtigen Dinge zu erzeugen pthreads konformen Code zu tun, und teilt dem Linker mit, die richtigen Dinge an zu tun, um es mit der POSIX-Thread-Bibliothek der Host-Plattform zu verknüpfen.

Um pthreads in Ihrem Programm zu verwenden, #include <pthreads.h>

+0

Das Projekt baut, wenn ich die sqlite3.so Datei anstelle der .a-Datei verknüpfen. Reicht das aus? Ihre Lösung funktioniert, aber jetzt habe ich eine undefinierte Verweis auf Dlerror, die ich nicht beheben kann, wenn ich auch -dl als Option in Linker-Optionen –

+0

verbinden 'libsqite3.so' ist in Ordnung. Verwenden Sie einfach '-lsqlite3' in ** Andere Linker-Optionen ** und der Linker wählt die '.so' für Präferenz. Sie müssen seinen Pfad in ** Search Directories ** -> ** Linker ** angeben, wenn sich Ihr 'libsqlite3.so' nicht in einem der Standard-Lib-Verzeichnisse'/usr/lib', '/ usr/local/befindet. lib' –

Verwandte Themen