2017-09-09 115 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“