2011-07-27 28 views
1

QtでSQLiteデータベースを作成しようとしています。これは私が持っているコードです:QtでSQLiteデータベースを作成する(C++)

しかし、それは動作しません。

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:8: error: undefined reference to `imp__ZN12QSqlDatabase17defaultConnectionE'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:8: error: undefined reference to `imp__ZN12QSqlDatabase11addDatabaseERK7QStringS2_'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:8: error: undefined reference to `imp__ZN12QSqlDatabaseD1Ev'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:9: error: undefined reference to `imp__ZN12QSqlDatabase15setDatabaseNameERK7QString'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:11: error: undefined reference to `imp__ZN12QSqlDatabaseD1Ev'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:11: error: undefined reference to `imp__ZN12QSqlDatabaseD1Ev'

:-1: error: collect2: ld returned 1 exit status

私はこれは私がC++/Qtの中のデータベースと連携しようとしたのは初めてであるように私が何か間違ったことをやっていることを確信している:これは私が受け取る出力されます。データベースを作成する上での助けに感謝します!コンパイラが文字のエスケープについて不平を言っていたので、ファイルパスに余分なスラッシュを追加しました。余分なスラッシュはそれと関係がありますか?もしそうなら、私は次のキャラクターから逃げようとしていると思うことなく、パスを入力することができます。

+0

これはリンカーエラーです。コンパイラーエラーではありません。 sqliteライブラリにリンクされていることを確認してください。 –

+1

リンカーの設定は何ですか?あなたはQtSqlライブラリとリンクしていますか? – Bart

+0

いいえ、私はしません。これどうやってするの?バート、私は私の最後の質問にあなたの答えからの提案としてSQLiteを使用する方法を学ぼうとしていますが、私は多くのドキュメントを見つけることができませんでした。 SQLiteライブラリとリンクするにはどうすればいいですか? –

答えて

7

は、それが動作するようになっていないの後、私はQtのコミュニティフォーラムをチェックし、すべて私が.PROファイルここ

QT += sql

たフォーラムの投稿をされて行方不明になったようだ。http://developer.qt.nokia.com/forums/viewthread/8262/

+0

ありがとう、これは私を助けた。私がQtデータベースを作成しようとしていたときに、リンカーからいくつかのエラーが出て、それらを解決する方法が失敗しました。Qtのドキュメントに記述されていない.proのステートメントを含める必要があることに気付くのは面白いです。私はQtNetworkと同様の状況があります.QtNetworkも.proに含める必要がありますが、これはドキュメントに記載されています –

3

エラーは、コンパイラエラーではなく、リンカエラーです。エラー自体はSQLiteではなくQtに関連しています。あなたはQtSql4.libとリンクしていない可能性が高い(4は異なるバージョン番号かもしれない)。そうすることは、あなたが見ているエラーを消滅させる可能性が非常に高いでしょう。

あなたのコメント/質問への回答として、(あなたのアプリケーションレベルで)SQLiteについて全く心配する必要はありません。 QtのSQL機能を使用しているので、これはQtによって処理されます(そして隠されます)。 Qtは、database driversと呼ばれるものを使用します。これは、コードで指定した内容に基づいてロードするプラグインです。あなたのケースではSQLiteドライバです。

Qtをインストールしたときにこのドライバが作成されていない場合は、自分で構築する必要があります。上記のリンクにある指示に従うことができます。

p.s.あなたは正しく「エスケープ文字」問題を処理しました。これは現在の問題の原因ではありません。

+0

"%QTDIR%\ src \ plugins \ sqldrivers \ sqlite"私のコンピュータ上のフォルダ。コマンドプロンプトで%QTDIR%を見つけることができません。また、コンピュータ上のQTがあるフォルダに移動すると、「src」フォルダはありません。 –

+0

%QTDIR%は環境変数QTDIRを指します。この変数は通常、Qtをインストールした場所を示します。 (自分でその変数を作成しなければならないかもしれません。バイナリリリースをインストールしましたか?私は個人的には常にソースからQtをビルドするので、バイナリリリースの内容はわかりませんが、srcフォルダがない理由を説明しているかもしれません。 – Bart

+0

はいQTのウェブサイトのバイナリからインストールしました。 –

関連する問題