gpt4 book ai didi

c - 找到一个符号和其他 "unresolved external symbol"

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:29 27 4
gpt4 key购买 nike

在我的 Visual Studio 2010 中有 2 个项目。一个是静态库(如果有人问,则为 mhook 2.3),另一个是 DLL。两者都设置为编译为/MT。

mhook 项目在其 mhook.h 中有两个函数:

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

dll工程引用了mhook工程,同时使用了Mhook_SetHook和Mhook_Unhook。使用相同的 mhook.h。当我编译dll项目时,出现以下错误:

1>hookdll.obj : error LNK2001: unresolved external symbol _Mhook_Unhook

注意,链接成功找到了Mhook_SetHook。如果我注释掉 Mhook_Unhook 的使用,程序编译成功。

Dumpbin 提示这两个符号都存在于静态库中:

>dumpbin /symbols mhook-test.lib|find "Mhook"
015 00000000 SECT4 notype () External | ?Mhook_SetHook@@YAHPAPAXPAX@Z (i
nt __cdecl Mhook_SetHook(void * *,void *))
122 00000000 SECT3B notype () External | ?Mhook_Unhook@@YAHPAPAX@Z (int _
_cdecl Mhook_Unhook(void * *))
>

我很迷茫,请帮忙。

最佳答案

回答:我显然混合了 C++ 和 C 代码——手头的库是 C++ 的,而我的程序是 C 的。

我不得不在它周围添加 extern C,正如从这个 Using C++ library in C code 中收集到的那样:

#ifdef __cplusplus
extern "C" {
#endif
BOOL Mhook_SetHook(PVOID *ppSystemFunction, PVOID pHookFunction);
BOOL Mhook_Unhook(PVOID *ppHookedFunction);
#ifdef __cplusplus
} // extern "C"
#endif

完成后,我的符号导出开始看起来好多了:

C:\Users\MACABRE\Documents\Visual Studio 2010\Projects\luahooker\Debug>dumpbin /
exports mhook.lib
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file mhook.lib

File Type: LIBRARY

Exports

ordinal name

_Mhook_SetHook
_Mhook_Unhook

关于c - 找到一个符号和其他 "unresolved external symbol",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181821/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com