3

我从这里下载 SQLite 的 C/C++ 接口。我得到 4 个源文件shell.c,sqlite3.c和.sqlite3.hsqlite3ext.h

现在我将所有这 4 个文件添加到我的 cocos2d-x 项目中,并使用以下代码进行测试:

#include "sqlite/sqlite3.h"

sqlite3 *pDB = NULL;
char * errMsg = NULL;
std::string sqlstr;
int result;

result = sqlite3_open("save.db", &pDB);
if( result != SQLITE_OK )
    CCLog( "failed,status_code:%d ,error_msg:%s\n" , result, errMsg );

sqlite3_close(pDB);

然后我运行它。但它构建失败,错误如下所示:

重复符号 _main 在:

/Users/tangyue/Library/Developer/Xcode/DerivedData/CrossKaiser-bkepfijxelboxkchsxvcmpozrwlt/Build/Intermediates/CrossKaiser.build/Debug-iphonesimulator/CrossKaiser.build/Objects-normal/i386/main.o

/Users/tangyue/Library/Developer/Xcode/DerivedData/CrossKaiser-bkepfijxelboxkchsxvcmpozrwlt/Build/Intermediates/CrossKaiser.build/Debug-iphonesimulator/CrossKaiser.build/Objects-normal/i386/shell.o

ld:架构 i386 的 1 个重复符号 clang:错误:链接器

命令失败,退出代码为 1(使用 -v 查看调用)

main我认为这些文件中肯定有一个,会出现这个错误。我main在文件中找到了方法shell.c。因为我没有在我的测试代码中包含这个文件,所以我将它从项目中删除。

然后我再次运行它。这次构建成功,但值为resultNOT SQLITE_OK为14( SQLITE_CANTOPEN),表示“无法打开数据库文件”。

现在我应该怎么做才能正确运行程序?该shell.c文件的用途是什么,我将其从项目中删除是错误的吗?

[更新]


我喜欢它使用以下代码:

string dbPath = CCFileUtils::sharedFileUtils()->getWriteablePath();
dbPath.append("save.db");

CCLog("%s", dbPath.c_str());

result = sqlite3_open_v2(dbPath.c_str(), &pDB, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);

代替

result = sqlite3_open("save.db", &pDB);
4

1 回答 1

2

从您的项目中删除 shell.c。它是使用 sqlite 数据库的 cli 工具。它定义 main() 因为它是可执行的。

关于你的问题sqlite3_open 的第二部分:“无法打开数据库文件”

于 2013-02-18T07:12:29.147 回答