我正在尝试将SQLite嵌入到我的项目中。我已将以下文件包含在名为 lite 的目录中:sqlite3.dll,sqlite3.h和sqlite3.lib。
这是我的项目:
#include <stdio.h>
#include <lite/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));
return(0);
}else{
fprintf(stderr, "Opened database successfully\n");
}
sqlite3_close(db);
}
运行项目时出现以下错误:
:-1: error: cannot find -lsqlite3d
collect2.exe:-1: error: error: ld returned 1 exit status
我可能做错了什么?
我在Qt工作。这是我的 .pro 文件:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lite/ -lsqlite3
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lite/ -lsqlite3d
else:unix: LIBS += -L$$PWD/lite/ -lsqlite3
INCLUDEPATH += $$PWD/lite
DEPENDPATH += $$PWD/lite
答案 0 :(得分:3)
由于您已经在使用Qt,为什么不使用Qt SQL module?你将节省很多痛苦,你只需添加
就可以绕过这种联系问题QT += sql
给你Qt项目文件,然后添加
#include <QtSql>
你的文件。您将拥有许多模型视图类,这些类有助于将数据库集成到您的应用程序UI中。
这是在Qt应用程序中使用SQL的推荐方法,除非您有非常特殊的需求。你可以让Qt使用不同的SQL引擎(SQLite,MySQL,...),但是Qt会为你抽象所有这些。
答案 1 :(得分:1)
尽管为时已晚,但我认为这里存在一些问题,即使变通办法是切实可行的,..
lsqlite3d
文件中配置的lib .pro
的“调试”版本。获取lib的“调试”文件,或从.pro
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lite/ -lsqlite3d
在Qt中添加库时,这似乎是一个常见错误。.有一个选项:
Add "d" suffix for debug version
并且没有lib的调试版本时,必须取消选择此选项。
第二和这个答案的实质,因为SQLite是用C编写的,所以include 该部分不正确,将无法正常工作;必须将其更正为:
extern "C" {
#include <lite/sqlite3.h>
}
在纠正了这两个问题之后..向Qt添加SQLite库或通常任何C库应该没有问题。
实际上使用SQLite之类的小代码,另一种选择是通过仅将sqqlite3.h
和sqlite3.c
添加到Qt项目并删除与sqlite3.lib
的链接来将其与项目静态编译。 .pro
中的内容,其中包含部分已更新。