Ich versuche SQLite c API zu lernen und geschrieben Code zum Testen mehrerer Datenbankverbindungen zu gleichen db-Datei. diese Dateien ohne Fehler kompiliert, aber wenn ich es laufen bekomme ich:sqlite Fehler: undefined swmbol: pthread_mutex_lock
./sq: symbol lookup error: ./sq: undefined symbol: pthread_mutex_lock, version GLIBC_2.2.5
hier
der Code:
#include "../sqlite3.h"
int main()
{
sqlite3 **my_db;
sqlite3 **my_db2;
sqlite3_stmt **ppStmt;
sqlite3_stmt **ppStmt2;
int res;
double res2;
int rc;
char pzTail[100];
sqlite3_open("../test.db", my_db);
sqlite3_open("../test.db", my_db2);
sqlite3_prepare_v2(*my_db, "select * from tbl1 where one='goog';", 50, ppStmt, &pzTail);
rc = sqlite3_step(*ppStmt);
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to fetch data: %s\n", sqlite3_errmsg(my_db));
sqlite3_close(my_db);
return 1;
}
res = sqlite3_column_int(*ppStmt, 1);
printf("we have %d\n",res);
sqlite3_step(*ppStmt);
res = sqlite3_column_int(*ppStmt, 1);
printf("we have %f\n",res);
sqlite3_step(*ppStmt);
res = sqlite3_column_int(*ppStmt, 1);
printf("we have %d\n",res);
sqlite3_finalize(*ppStmt);
sqlite3_close(*my_db);
return 0;
}
Wenn ich Code ohne zweite sqlite3_open Aussage alles laufen ist richtig, aber wenn ich es hinzufügen, die oben genannten Fehler erscheint zur Laufzeit und gDB zeigt dies:
(gdb) run
Starting program: .../sqlite-amalgamation3130000/playground/sq
dl-debug.c:74: No such file or directory.
dl-debug.c:74: No such file or directory.
dl-debug.c:74: No such file or directory.
dl-debug.c:74: No such file or directory.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
dl-debug.c:74: No such file or directory.
dl-debug.c:74: No such file or directory.
(process 4636) exited with code 0177]
ich diesen Code mit einer Kopie sqlite_amalgamation Quelle anstelle von Systemen aus irgendeinem Grund sQLite-Bibliothek installiert kompiliert mit Dieser Befehl:
gcc -g -I.. sqlite_c_api.c ../sqlite3.c -ldl -pthread -o sq
und ich versuchte ‚pthread_mutex_lock()‘ auf eine Maschine in einem gewissen vor der Anwendung mit mehreren Threads.
Wo ist/sind meine Fehler?
Wahrscheinlich ein Tippfehler: put '-lpthread' anstelle von' -pthread' (fehlt 'l') in den' gcc' Aufrufbefehl. – user3078414
Den Befehl ausgeben: '$ ldd sq' zeigt irgendein fehlendes Objekt an? (wie in "nicht gefunden")? – pah
Ich testete die Änderung von -thread zu -lpthread. dasselbe reuslt. – mhk