2

直接呼び出していないメソッドに対して、Visual Studio で大量のリンカー エラーが発生しています。私は日中は Java 開発者ですが、Windows マシンで実行することを目的とした C++ で行う必要があるプロジェクトがあります。したがって、私はVisual Studioをいじっています。

基本的に、アクセサー メソッドを追加した os プロジェクトがあります。そのプロジェクトを .lib ファイルとしてコンパイルしました (コンパイルとリンクは問題ありません)。

次に、そのライブラリを使用する独自のプロジェクトを作成します。Project->Properties->Linker->Inputの下にライブラリを含め、General->Additional Lib Directoriesに適切なディレクトリを設定しました。適切なファイルにヘッダーを含めました。クラスの 1 つのコンストラクターを呼び出しているだけです...まだ作成したメソッドを呼び出していません。

コードはコンパイルされますが、次のようなリンカー エラーが山のように表示されます。ほとんどの場合、LNK2019 および LNK2001 エラーです。さまざまな設定 (lib、exe など) で再コンパイルを試みましたが、リンカ エラーが増えるだけのようです。以前の設定に戻すと、エラーの数はピークのままです。これを修正する方法はありますか?

ビルドログ

ビルド開始: プロジェクト: SpamCapture、構成: Debug|Win32

コマンドライン:

[ /VERBOSE:LIB /OUT:"C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe" /INCREMENTAL /LIBPATH: "C:\SpamCapture\Config\Debug\" /MANIFEST /MANIFESTFILE:"Debug\SpamCapture.exe.intermediate.manifest" /NODEFAULTLIB:"libcmtd.lib" /NODEFAULTLIB:"nafxcwd.lib" /DEBUG /PDB:"c :\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32 .lib uuid.lib odbc32.lib odbccp32.lib

".\Debug\Interaction.obj"

".\Debug\InteractionSet.obj"

".\Debug\LogReader.obj"

".\Debug\SpamCapture.obj"

".\Debug\stdafx.obj"

".\Debug\SpamCapture.res"

".\Debug\SpamCapture.exe.embed.manifest.res" ] コマンドライン "link.exe @c:\SpamCapture\SpamCapture\SpamCapture\Debug\RSP0000103081740.rsp /NOLOGO /ERRORREPORT:PROMPT" の作成

出力ウィンドウ:

リンク中... リンク: 警告 LNK4067: あいまいなエントリ ポイント。選択した 'mainCRTStartup' ライブラリを検索中 C:\SpamCapture\Config\Debug\KeyCapture_Config.lib を検索中: C:\Program Files\Microsoft Visual Studio 8\VC\lib\kernel32.lib を検索中: C:\Program Files\Microsoft Visual Studio を検索中8\VC\PlatformSDK\lib\user32.lib: 検索中 C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib: 検索中 C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\ lib\winspool.lib: 検索中 C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib: 検索中 C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib: C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib を検索中: C: を検索中

リンカー エラーはここから始まります。

KeyCapture_Config.lib(KeyCapture_ConfigDlg.obj): エラー LNK2001: 未解決の外部シンボル "public: virtual int __thiscall CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@CWnd@@UAEHPBD0KABUtagRECT@@PAV1@IPAUCCreateContext@@@Z)

...このようなものをもっとたくさん

KeyCapture_Config.lib(KeyCapture_ConfigDlg.obj): エラー LNK2019: 未解決の外部シンボル "public: struct HICON__ * thiscall CWinApp::LoadIconA(unsigned int)const " (?LoadIconA@CWinApp@@QBEPAUHICON @@I@Z) が関数で参照されています" public: __thiscall CKeyCapture_ConfigDlg::CKeyCapture_ConfigDlg(class CWnd *)" (??0CKeyCapture_ConfigDlg@@QAE@PAVCWnd@@@Z)

...このようなものをもっとたくさん

(?DoDataExchange@SetupDialog@@MAEXPAVCDataExchange@@@Z) C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe: 致命的なエラー LNK1120: 34 の未解決の外部

結果:

ビルド ログは "file://c:\SpamCapture\SpamCapture\SpamCapture\Debug\BuildLog.htm" SpamCapture に保存されました - 44 個のエラー、1 個の警告

4

4 に答える 4

5

ライブラリKeyCapture_Config.libは MFC GUI クラス ( CWndCWinAppなど) を使用していますが、リンク先のアプリケーションはコンソール アプリケーションです (/SUBSYSTEM:CONSOLEリンカー コマンド ラインのオプションを参照してください)。これはうまくいきません。新しい MFC GUI アプリケーション プロジェクトを作成し、ライブラリをそのプロジェクトに追加する必要があります。

編集: コメントのリンクを確認しました: http://dynamicnetservices.com/~will/academic/textinput/keycapture/で、KeyCapture_Config は実際には KeyCapture DLL を使用する MFC ダイアログ アプリケーションのようです。に直接リンクすることで、コンソール アプリケーションで KeyCapture を使用できる場合がありますKeyCapture.lib

于 2008-10-27T19:31:37.590 に答える
1

リンク エラーは、多くの MFC 関数が不足していることを訴えているようです。リンク行には、MFC を除外する /NODEFAULTLIB:"nafxcwd.lib" が含まれます。リンクしているライブラリは MFC でビルドされていますか?

他に確認すべきことは、アプリとライブラリを同じ文字セット (つまり、両方のマルチバイトまたは両方の Unicode) でコンパイルしていることです。

lib をビルドする場合、リンク ステップがないため、オブジェクトの任意のコレクションを lib にスローすることができます。

于 2008-10-27T18:16:40.220 に答える
0

Rob Walker が問題を解決したと思います。KeyCapture_Config.lib のドキュメントに MFC へのリンケージがないと記載されている場合は、MFC へのリンケージを必要とするディレクティブのソースを確認してください。このようなもの:

#pragma comment(lib, "nafxcwd.lib")

MFC への依存が発生し、KeyCapture_Config.lib ドキュメントが古くなっている可能性があります。

于 2008-10-27T18:55:36.867 に答える
0

プロジェクトが Debug Multithreaded ランタイムとリンクしているようです。これはあなたの意図ですか?その場合、使用していると思われる KeyCapture_Config ライブラリとの不一致がある可能性があります。

KeyCapture_Config はサードパーティのライブラリですか? もしそうなら、ソースからビルドしましたか、それとも lib/dll が提供されましたか?

どの C/C++ ランタイムがビルドされているかについて調査する必要があるかもしれません。ランタイム ビルドの不一致の可能性を明らかにするのに役立つMicrosoft KB 記事を参照できます。

于 2008-10-27T18:27:10.807 に答える