2017-09-09 3 views
-2

のVisual Studio 2017(新鮮install-コマンドライン版)がエラーを与える:コンパイラリンカ外部シンボルMhook_SetHook

LNK2019: LNK2019 wmain関数で参照未解決の外部シンボルMhook_SetHook:

wmain関数で参照未解決の外部シンボルMhook_UnHookを

コマンドコンパイル:CL/Y-/EHsc/DUNICODE mhook-TEST.CPP gdi32.lib user32.lib

を、私は、これはC/C++重複が整理に関連するかもしれないと思ったので、次のように、私はmhook.hを変更:

#ifdef __cplusplus 
extern "C" { 
#endif 

BOOL Mhook_SetHook(PVOID *ppSystemFunction, PVOID pHookFunction); 
BOOL Mhook_Unhook(PVOID *ppHookedFunction); 

#ifdef __cplusplus 
} // extern "C" 
#endif 

これは結果に大きな違いはありません。

なぜリンカーに問題があるのか​​分かりません。

mhook-test.cppにはmhookライブラリが付属しています。

+2

[定義されていない参照/未解決の外部シンボルエラーとは何か、どうすれば修正できますか?](https://stackoverflow.com/questions/12573816/what-is-an-undefined -reference-unresolved-external-symbol-error-and-do-do-i-fix) – user0042

+0

C++名前のマングリングについて調べます。そのライブラリがC++コンパイラを使用してコンパイルされている場合、 'extern" C "'はここで間違っているかもしれません。 – user0042

+0

あなたの.hファイルは基本的に "Mhook_SetHookという名前の関数がありますが、他のどこかで定義されています"と言っています。あなたはリンカに「どこか別の場所」を提供しませんでした。 gdi32.libとuser32.libはリンクしていますが、mhook.libはリンクしていません。もちろん、リンカーはそれを見つけることができません。 –

答えて

0

mhookライブラリはプリコンパイルされていません。リンカーに指定できるライブラリにコンパイルする必要があります。だから、

、それぞれ「.C」とmhookディレクトリのソースコード内の「た.cpp」ファイルの:

「まず、実行CL/C/EHsc MathFuncsLib.cppコードをコンパイルして作成しますMathFuncsLib.objという名前のオブジェクトファイル(clコマンドはコンパイラCl.exeを呼び出し、/ cオプションはリンクせずにコンパイルを指定します)次に、lib MathFuncsLib.objを実行してコードをリンクし、静的ライブラリMathFuncsLib.libを作成します" 「CL/Y-/EHsc/DUNICODE/D_UNICODE mhook-TEST.CPP gdi32.lib user32.lib mhook.lib disasm.lib misc.lib disasm_x86: - https://msdn.microsoft.com/en-us/library/ms235627.aspx

これらは、最終的なコンパイルコマンドを指定しなければなりません。 lib cpu.lib "

関連する問題