sqlite错误:undefined swmbol:pthread_mutex_lock

时间:2016-06-22 13:28:05

标签: c sqlite linker pthreads


我正在尝试学习sqlite c api并编写一些代码来测试与同一db文件的多个数据库连接。这个文件编译时没有错误但是当我运行它时我得到:

./sq: symbol lookup error: ./sq: undefined symbol: pthread_mutex_lock, version GLIBC_2.2.5

这是代码:

#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;
}

当我在没有第二个sqlite3_open语句的情况下运行代码时,一切都正确但是当我添加它时,上面提到的错误出现在运行时并且gdb显示:

(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]

我使用sqlite_amalgamation源代码编译了此代码,而不是系统安装了sqlite库,出于某种原因使用此命令:

gcc -g -I.. sqlite_c_api.c ../sqlite3.c -ldl -pthread -o sq

我试过' pthread_mutex_lock()'在一些机器上的一些多线程应用程序之前。
我的错误在哪里?

1 个答案:

答案 0 :(得分:2)

我解决了。错误是因为当我用*指针替换它们时我使用**指针并相应地改变了代码,一切似乎都是正确的。