【问题标题】:DLL and Name ManglingDLL 和名称修改
【发布时间】:2011-08-23 01:47:45
【问题描述】:

我有一个第三方 LIB,其符号导出为纯 C/cdecl,因此例如 dumpbin.exe /SYMBOLS 报告 __imp_nvmlInit 和 nvmlInit 都已导出。

但是在 Visual Studio 2010 中,当我尝试导入它们时,头文件会有

extern "C" nvmlReturn_t nvmlInit(...);

但是当我尝试编译时,出现以下错误:

main.obj:错误 LNK2019:函数 _main 中引用的未解析的外部符号 _nvmlInit

如何阻止 Visual Studio 查找带有前导下划线的符号? __declspect(dllimport) 不起作用,因为它会装饰成 __imp__nvmlInit(一个下划线太多)。

谢谢。

【问题讨论】:

    标签: c++ visual-c++ name-decoration


    【解决方案1】:

    这是一个链接器错误。您需要链接与 DLL 关联的 .LIB 文件,这将向链接器保证,当加载 DLL 本身时,该函数将在运行时可用。

    【讨论】:

    • 糟糕,对不起,我在原来的帖子中犯了一个错误——我实际上链接到 .LIB,并且库导出完全未修饰的函数,而链接器正在寻找下划线前缀的名称...
    猜你喜欢
    • 2010-12-18
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2020-08-22
    • 2011-06-07
    相关资源
    最近更新 更多