【发布时间】:2017-09-09 16:10:29
【问题描述】:
Visual Studio 2017(全新安装-命令行版本)报错:
LNK2019:函数 wmain 中引用的未解析外部符号 Mhook_SetHook LNK2019:函数 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 库一起提供。
【问题讨论】:
-
检查 c++ 名称修改。如果该库是使用 C++ 编译器编译的,
extern "C"在这里可能是错误的。 -
您的 .h 文件基本上说“有一个名为 Mhook_SetHook 的函数,但它是在其他地方定义的”。您没有向链接器提供“其他地方”。您正在链接 gdi32.lib 和 user32.lib 但不是 mhook.lib。所以当然链接器找不到它。
-
@HansPassant:我认为这可能是问题所在,但我只有 mhook 库的源代码,而不是库本身。换句话说,我没有“mhook.lib”文件;我以为它会与测试程序一起创建?
-
你没有编译它。学习如何在 Visual Studio 中使用项目,项目避免许多新手错误。
标签: c++ visual-studio linker