質問

これだMFCアプリケーション私が取り組んでいるハードウェアのニーズへの組み込みデータベースです。そして、狩猟のためのスリック、"ヤ"データベースで迷待にSQLite.

を作成しましたDBらしい造形はそのままに、作成した静的ライブラリプロジェクトVisual Studio2008年.図書館のプロジェクトで使用その他の主なプロジェクト.

の図書館"プロジェクトで作ったクラス DBClass 方法 AddFeedToDB(CFeed f).図書館のプロジェクトを使用し .lib ファイルからcodeproject(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

と思欠?

役に立ちましたか?

解決

これは、私が実際のシンボルがXXX(すなわち?close@CppSQLite3DB@@QAEXXZ)であった。

シンボル__impXXX(すなわち__imp?close@CppSQLite3DB@@QAEXXZの、インポートlibにのだと思ったことを何度も私以上に何が起こりました

リンカエラーの理由は、コンパイル手順で発見される、その後です:コンパイラは、のはず?close@CppSQLite3DB@@QAEXXZを生成__imp?close@CppSQLite3DB@@QAEXXZ記号インポートすると、生成されます。これは、多くの場合、関数宣言自体が__declspec( dllimport )を持っていなかったことを意味します。これは定義されていないいくつかのプリプロセッサシンボルによって引き起こされることがあります。または__declspecがそこにいるすべてではない...

他のヒント

私はそれがすでにこの質問以来、2年で知っている...しかし、私はここで同じような状況で実行されます。すべてのヘッダファイルを追加しました... ..のlibディレクトリを追加し、このエラーを持っておきます。 >リンカ - - >入力 - > Aditional依存だから私は、手動で構成プロパティへのlibを追加しました そして、すべては私のために動作します。

それはあなたのケースであれば知らないが、IMPの接頭辞を使用すると、Win32プロジェクトでx64のライブラリをコンパイルしていることを意味する。

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

私は以下の手順を実行します。

  1. う図書館います。objファイルのシンボルとエクスポートする。

  2. となっているかをチェックを実際に 輸出が非常にシンボルマーク(チェック文字と).時には、それを呼び出し規約が異なります。

  3. チェックの場合は図書館を始めることができる"のシンボルはリンカー初のチェックの追加図書館は、その確認の場合の図書館で実際に見つかったほどいことを利用filemon.exe からsysinternalsし、link.exe 開libファイルです。)

後の考え方をよく目にすることでしょうが図書館プロジェクト ない 輸出を求められる機能です。この機能は、データベースlib.するlibの主力プロジェクト.での使用に追加する静的libます。

(1がDLLでない限り)

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top