我正在使用Linux Mint 15。 我从http://www.sqlite.org/download.html下载了sqlite-amalgamation-3080002.zip
(并将文件放在我的项目目录中)。
我已经完成了以下步骤(尽管我知道这与之前的步骤重复):
sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev
sqlite3
在命令行下完全可以正常工作,我可以创建/编辑数据库。
我创建了一个测试文件:
#include <stdio.h>
#include <sqlite3.h>
int main(int argc, char* argv[]){
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
}else{
fprintf(stderr, "Opened database successfully\n");
}
sqlite3_close(db);
}
并运行:
gcc ./sqliteTest.c -o sqliteTest -lsqlite
并且遇到了以下错误:
./sqliteTest.c: In function ‘main’:
./sqliteTest.c:14:7: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
/usr/bin/ld: cannot find -lsqlite
collect2: error: ld returned 1 exit status
我尝试了:
gcc -Wall sqliteTest.c -o sqliteTest -lsqlite
并获得:
sqliteTest.c: In function ‘main’:
sqliteTest.c:14:7: warning: implicit declaration of function ‘exit’ [-Wimplicit-function-declaration]
sqliteTest.c:14:7: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
sqliteTest.c:7:10: warning: unused variable ‘zErrMsg’ [-Wunused-variable]
sqliteTest.c:19:1: warning: control reaches end of non-void function [-Wreturn-type]
/usr/bin/ld: cannot find -lsqlite
collect2: error: ld returned 1 exit status
我把<sqlite3.h>
改为"sqlite3.h"
,然后运行了第一个编译命令,得到以下结果:
./sqliteTest.c: In function ‘main’:
./sqliteTest.c:14:7: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
/tmp/ccvdOOv2.o: In function `main':
sqliteTest.c:(.text+0x24): undefined reference to `sqlite3_open'
sqliteTest.c:(.text+0x39): undefined reference to `sqlite3_errmsg'
sqliteTest.c:(.text+0x89): undefined reference to `sqlite3_close'
collect2: error: ld returned 1 exit status
我被难住了...下一步该尝试什么?
sqlite3.h
放入/usr/include,将libqslite3.so
放入GCC能够找到的目录中。由于提问者在他的代码中使用#include <sqlite3.h>
,而不是#include "sqlite3.h"
,他正在尝试使用系统版本,而他下载源代码的事实是可以忽略的红色干扰。或者,他应该按照你的建议去做,但同时他也应该使用#include "sqlite3.h"
而不是#include <sqlite3.h>
。 - This isn't my real name#include“sqlite3.h”
。但有趣的是,Mint提供了预编译版本。 - Siyuan Rensqlite-amalgamation-3080002.zip
,因为这通常会提供更好的性能。但这没有起作用,使用拼写错误(sqlite
vssqlite3
)编译也没有起作用,命令提示符中的 sqlite3 也没有起作用,所以我认为 Mint 实际上没有附带 sqlite。因此我使用了 apt-get。 - AppFzx