2017-09-09 119 views
-2

的Visual Studio 2017(新鮮install-命令行版)爲錯誤:編譯鏈接器外部符號Mhook_SetHook

LNK2019:解析的外部符號Mhook_SetHook在函數引用wmain LNK2019:解析的外部符號Mhook_UnHook在函數引用wmain

編譯命令:CL/Y-/EHSC/DUNICODE mhook-TEST.CPP GDI32.LIB USER32.LIB

我認爲這可能與C/C++的mixup,所以我改性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-how-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 「。 - https://msdn.microsoft.com/en-us/library/ms235627.aspx

這些必須隨後進行最後編譯命令來指定:「CL/Y-/EHSC/DUNICODE/D_UNICODE mhook-TEST.CPP GDI32.LIB USER32.LIB mhook.lib disasm.lib misc.lib disasm_x86。 lib cpu.lib「