我正在尝试学习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()'在一些机器上的一些多线程应用程序之前。
我的错误在哪里?
答案 0 :(得分:2)
我解决了。错误是因为当我用*指针替换它们时我使用**指针并相应地改变了代码,一切似乎都是正确的。