たいのですが解決のエラー LNK2019:未解決の外部記号"?[重複]
-
21-08-2019 - |
質問
この質問に答えはこちら
これだ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にリンクする、または直接、プロジェクト内のソースファイルをインクルードする必要がありますどちらか。 (あなたはどちらをしましたか?)
私は以下の手順を実行します。
う図書館います。objファイルのシンボルとエクスポートする。
となっているかをチェックを実際に は 輸出が非常にシンボルマーク(チェック文字と).時には、それを呼び出し規約が異なります。
チェックの場合は図書館を始めることができる"のシンボルはリンカー初のチェックの追加図書館は、その確認の場合の図書館で実際に見つかったほどいことを利用filemon.exe からsysinternalsし、link.exe 開libファイルです。)
後の考え方をよく目にすることでしょうが図書館プロジェクト ない 輸出を求められる機能です。この機能は、データベースlib.するlibの主力プロジェクト.での使用に追加する静的libます。
コンパイラとリンカが別のものに1つのライブラリをリンクしません。あなたはあなたの主なプロジェクトで両方のライブラリ(cppsqlite3.libと、独自の静的ライブラリ)を指定する必要があります。