当前位置:  开发笔记 > 编程语言 > 正文

Clrdump(C++)错误LNK2019:函数_main中引用的未解析的外部符号__imp__RegisterFilter @ 8

如何解决《Clrdump(C++)错误LNK2019:函数_main中引用的未解析的外部符号__imp__RegisterFilter@8》经验,为你挑选了2个好方法。

我正在使用makefile系统与pvcs编译器(使用Microsoft Visual C++,2008编译器),我收到的形式有几个链接错误:

error LNK2019: unresolved external symbol __imp__RegisterFilter@8 referenced in function _main

这是发生在DESPITE使用extern "C"声明,即:

extern "C" int CLRDUMP_API RegisterFilter( LPCWSTR pDumpFileName, unsigned long DumpType );

此外,在makeexe.mak中,库被链接为:

$(COMPILEBASE)\ lib\clrdump.lib \

说实话,我不是makefile的专家,而且我正在将系统从Microsoft Visual C++ 6.0转换到2008.这种转换可能与链接错误有关,就像以前系统工作一样.

真的很感激任何帮助.

提前致谢,

真诚的,约瑟夫

- 编辑1 -

有谁知道如何在pvcs的makefile系统中打开详细信息?

请注意,上面的函数已经是编译器装饰的版本了

__imp__RegisterFilter@8

而C++的功能就是

RegisterFilter

感谢您的帮助,但如果有人可以发布更完整的解决方案,那也将非常感激.

真诚的,约瑟夫

- 编辑2 -

有些人发布了这个,但当我登录时它消失了:

imp前缀表示此函数是从DLL导入的.检查 - 的定义CLRDUMP_API- 是__declspec(dllimport)吗?有关更多信息,请参阅此文章.

有一个工作链接,但我已经失去了,但我想人们总是可以搜索主题.

谢谢,无论你是谁!

- 编辑3 -

谢谢ChrisN(我还没有被允许投票).尽管使用了刷新按钮,但你的答案消失了,但是在我发布了一个cut-n-paste之后又重新出现了.

这是我对此的定义:

define CLRDUMP_API __declspec(dllimport) __stdcall

我假设__stdcall没问题?

- 编辑4 -

虽然我很感谢那些回答的人的努力,特别是ChrisN,至少在我的特定系统上,链接错误仍然存​​在.所以如果有人有任何进一步的见解,我会很感激.再次感谢.



1> ChrisN..:

__imp_前缀表示该连接器预计这一功能从DLL进口.

是否来自此页面的clrdump库?如果是这样,请注意extern "C"库中提供的头文件中未使用该文件.我使用以下命令确认了这一点:

dumpbin /exports clrdump.lib

它产生以下输出RegisterFilter- 这是一个受损的C++函数名称:

?RegisterFilter@@YGHPBGK@Z (int __stdcall RegisterFilter(unsigned short const *,unsigned long))

我尝试使用Visual Studio 2008使用clrdump.lib创建示例程序.这是我的代码:

#include 
#include "ClrDump.h"

int _tmain(int argc, _TCHAR* argv[])
{
    RegisterFilter(L"", 0);
    return 0;
}

构建它会产生以下链接器错误:

LNK2019: unresolved external symbol "__declspec(dllimport) int __stdcall RegisterFilter(wchar_t const *,unsigned long)" (__imp_?RegisterFilter@@YGHPB_WK@Z)

代码使用Visual C++ 6.0构建正常.

请注意,dumpbin输出显示第一个参数为RegisterFilteras,unsigned short const *但链接器错误显示wchar_t const *.在Visual C++ 6.0中,wchar_t通常是typedef unsigned short,而在以后的版本中,它是一种独特的内置类型.

若要解决Visual Studio 2008中的问题,我将"将wchar_t视为内置类型"选项设置为"否"(/Zc:wchar_t-在编译器命令行上指定),现在代码构建正常.

很抱歉与我之前的回答混淆了.我希望这更有帮助!



2> 小智..:

我最近遇到了同样的问题.我排除了一个库来避免碰撞,所有的bug都消失了,除了LINK错误(就像你描述的那样).当我为另一个库交换库时(我排除(忽略)MSVCRT.lib,现在我排除(忽略)LIBCMT.lib)问题消失了.确保你没有在某处混合库.在我的情况下,链接器失败了"找不到imp _aligned_malloc".当然,我的任何代码中都没有该名称的方法.编译器在前面加上了imp.究竟为什么我不知道,除了当我交换排除(忽略)时问题消失了,如上所述.

尝试从一个新项目开始,重新添加源文件和头文件,并跟踪您排除的库(忽略).尝试各种组合.希望有所帮助.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有