【问题标题】:one symbol found and for other "unresolved external symbol"找到一个符号和其他“未解析的外部符号”
【发布时间】:2012-04-16 21:14:03
【问题描述】:

在我的 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 visual-c++ linker visual-studio-2010


    【解决方案1】:

    回答: 我显然是在混合 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多