3

ここから SQLite 用の C/C++ インターフェイスをダウンロードします。shell.cそして、sqlite3.c、 、sqlite3.hおよびの4 つのソース ファイルを取得します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 のシンボルが 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の 2 番目の部分について:「データベース ファイルを開けません」

于 2013-02-18T07:12:29.147 に答える