【发布时间】:2013-02-02 13:42:54
【问题描述】:
我从here 下载了 SQLite 的 C/C++ 接口。我得到了 4 个源文件 shell.c、sqlite3.c、sqlite3.h 和 sqlite3ext.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