【问题标题】:How to use sqlite3 in a cocos2d-x project in XCode如何在 XCode 的 cocos2d-x 项目中使用 sqlite3
【发布时间】:2013-02-02 13:42:54
【问题描述】:

我从here 下载了 SQLite 的 C/C++ 接口。我得到了 4 个源文件 shell.csqlite3.csqlite3.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 clang 的 1 个重复符号:错误:链接器

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

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

然后我再次运行它。这次构建成功,但是result的值是NOT 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);

【问题讨论】:

    标签: c++ xcode sqlite cocos2d-x


    【解决方案1】:

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

    关于你问题的第二部分sqlite3_open: "unable to open database file"

    【讨论】:

    • 感谢您的帮助,在我找到正确的文件路径后,我的问题得到了解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多