16

私が取り組んでいるこのMFCアプリケーションには、組み込みデータベースが必要です。そこで、私はそのための洗練された高速な「組み込み可能」データベースを探しに行き、SQLiteに出くわしました。

それを使用してDBを作成し、VisualStudio2008を使用して静的ライブラリプロジェクトを作成しました。ライブラリプロジェクトは別のメインプロジェクトで使用されます。

ライブラリプロジェクトではDBClass、メソッドを使用してクラスを作成しましたAddFeedToDB(CFeed f)。ライブラリプロジェクトは、.libcodeproject(cppsqlite3.lib)のファイルを使用します。

静的ライブラリをコンパイルするとき、エラーは検出されませんが、メインプロジェクトでライブラリプロジェクトファイルを使用しようとすると、次のタイプのエラーが発生します。

error LNK2019: unresolved external symbol "public:void __thiscall
   CppSQLite3DB::close(void)" (?close@CppSQLite3DB@@QAEXXZ 
   referenced in function "public: int __thiscall
   CTalkingFeedsDB::AddFeedToDB(class CFeed,char const*)" (?
   AddFeedToDB@CTalkingFeedsDB@@QAEHVCFeed@@PDB@Z

私は何が欠けていますか?

4

6 に答える 6

15

この質問からもう2年が経ちましたが…でも同じ状況で走っています。すべてのヘッダーファイルを追加しました...libディレクトリを追加しました..そしてこのエラーが発生し続けます。だから私は手動でlibを構成プロパティ->リンカー->入力->追加の依存関係に追加しました、そしてすべてが私のために働きます。

于 2011-06-28T12:39:00.093 に答える
9

実際のシンボルが(ie )であるのに対し、シンボルXXX(ie ?close@CppSQLite3DB@@QAEXXZインポートライブラリにあると思ったことが何度もありました。__impXXX__imp?close@CppSQLite3DB@@QAEXXZ

リンカエラーの理由は、コンパイルステップで確認できます。コンパイラは、?close@CppSQLite3DB@@QAEXXZインポートするシンボルを生成します。ここで、を生成する必要__imp?close@CppSQLite3DB@@QAEXXZがあります。これは多くの場合、関数宣言自体にがなかったことを意味します__declspec( dllimport )。これは、プリプロセッサシンボルが定義されていないことが原因である可能性があります。または__declspecまったくそこにいない...

于 2009-05-12T19:37:06.113 に答える
4

それがあなたの場合かどうかはわかりませんが、impプレフィックスは、Win32プロジェクトでx64ライブラリをコンパイルしていることを意味している可能性があります。

于 2011-05-05T08:38:59.297 に答える
1

codeproject SQLite libを実行可能ファイルにリンクするか、プロジェクトにソースファイルを直接含める必要があります。(どちらをしましたか?)

于 2009-05-11T18:02:17.667 に答える
1

私はこれらの手順に従います:

  1. シンボルのエクスポート元となるライブラリまたは.objファイルについて考えてください。

  2. それが実際にそのシンボルをエクスポートするかどうかを確認します(文字ごとに確認します)。時々、それは呼び出し規約が異なります。

  3. シンボルを含むと予想されるライブラリがリンカーに認識されているかどうかを確認します。最初に「追加のライブラリ」を確認し、次にライブラリが実際に見つかったかどうかを確認します(ほとんどの場合、sysinternalsのfilemon.exeを使用してこれを行い、リンクを探します.exeを使用してlibファイルを開きます。)

しばらく考えてみると、ライブラリプロジェクトが求められている関数をエクスポートしないことに気付くかもしれません。その関数はデータベースライブラリにあります。そのlibをメインプロジェクトに追加する必要があります。静的libプロジェクトに追加しても意味がありません。

于 2009-05-11T20:02:42.493 に答える
1

コンパイラとリンカは、あるライブラリを別のライブラリにリンクしません(1つがDLLでない場合)。メインプロジェクトで両方のライブラリ(cppsqlite3.libと独自の静的ライブラリ)を指定する必要があります。

于 2009-05-12T19:41:32.817 に答える