2016-06-22 12 views
1


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?

+0

Wahrscheinlich ein Tippfehler: put '-lpthread' anstelle von' -pthread' (fehlt 'l') in den' gcc' Aufrufbefehl. – user3078414

+0

Den Befehl ausgeben: '$ ldd sq' zeigt irgendein fehlendes Objekt an? (wie in "nicht gefunden")? – pah

+0

Ich testete die Änderung von -thread zu -lpthread. dasselbe reuslt. – mhk

Antwort

2

Ich löste es. Der Fehler war, weil ich ** Zeiger verwendete, als ich sie mit * Zeigern ersetzte und den Code entsprechend änderte, scheint alles richtig zu sein.