1. 编译时有几个处需要统一:
字符集要统一,或者都为Unicode编码;
MFC的使用,或者都选为在共享DLL中使用MFC;
使用ATL,或者都选中动态链接到ATL;
另外该安装的库要装上,如DirectX,路径要设置好。
2. error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,
error LNK2001: 无法解析的外部符号 __imp__timeGetTime@0
error LNK2019: 无法解析的外部符号 __imp__timeSetEvent@20
解决方法:在出错的项目添加头文件: Mmsystem.h,在引用库中添加:Winmm.lib
3. error C2504: "ICommDlgBrowser2": 未定义基类 c:\program files\microsoft sdks\windows\v6.0a\include\shobjidl.h 6407 TreePropSheet
错误 2 error C2504: "IFileDialogEvents": 未定义基类 d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 235 TreePropSheet
错误 3 error C2061: 语法错误 : 标识符"FDE_SHAREVIOLATION_RESPONSE" d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 244 TreePropSheet
错误 4 error C2061: 语法错误 : 标识符"FDE_OVERWRITE_RESPONSE"d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 246 TreePropSheet
错误 5 error C2504: "IFileDialogControlEvents": 未定义基类 d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 249 TreePropSheet
错误 6 error C2504: "ICommDlgBrowser2": 未定义基类 c:\program files\microsoft sdks\windows\v6.0a\include\shobjidl.h6407 sizecbar
错误 7 error C2504: "IFileDialogEvents": 未定义基类 d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 235 sizecbar
错误 8 error C2061: 语法错误 : 标识符"FDE_SHAREVIOLATION_RESPONSE" d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 244 sizecbar
错误 9 error C2061: 语法错误 : 标识符"FDE_OVERWRITE_RESPONSE"d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 246 sizecbar
错误 10 error C2504: "IFileDialogControlEvents": 未定义基类 d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 249 sizecbar
错误 11 error C2504: "ICommDlgBrowser2": 未定义基类
解决方法:(针对XP系统,其它系统作相应修改)
有两个地方改一下一般可以解决这个问题:
(1). 在StdAfx.h中加入如下两行(针对windows xp系统,不同系统不一样)
#define _WIN32_WINNT 0x0501
#define WINVER 0x0501
(2). shobjidl.h 文件在vc6和vc9中都有,两个文件是有一些区别,使用vc9中就不会有问题,查找到VC9 中shobjidl.h所在位置,加入到包含路径中,如将
C:\Program Files\Microsoft Visual Studio 9.0\VC\include 路径加入到包含路径中。
(3). 引起这个问题的原因可能是如下
http://www.rupeng.com/forum/thread-3214-1-1.html
http://www.easewe.com/Article/document/879.htm
4. 错误 25 error C2491: "FLAC__stream_encoder_set_do_mid_side_stereo": 不允许
dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1515 MpaDecFilter
错误 26 error C2491: "FLAC__stream_encoder_set_loose_mid_side_stereo": 不允许
dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1526 MpaDecFilter
错误 27 error C2491: "FLAC__stream_encoder_set_apodization": 不允许 dllimport 函
数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1538 MpaDecFilter
错误 28 error C2491: "FLAC__stream_encoder_set_max_lpc_order": 不允许 dllimport
函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1609 MpaDecFilter
错误 29 error C2491: "FLAC__stream_encoder_set_qlp_coeff_precision": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1620 MpaDecFilter
错误 30 error C2491: "FLAC__stream_encoder_set_do_qlp_coeff_prec_search": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1631 MpaDecFilter
错误 31 error C2491: "FLAC__stream_encoder_set_do_escape_coding": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1642 MpaDecFilter
错误 32 error C2491: "FLAC__stream_encoder_set_do_exhaustive_model_searc h": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1658 MpaDecFilter
错误 33 error C2491: "FLAC__stream_encoder_set_min_residual_partition_or der": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1669 MpaDecFilter
错误 34 error C2491: "FLAC__stream_encoder_set_max_residual_partition_or der": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1680 MpaDecFilter
错误 35 error C2491: "FLAC__stream_encoder_set_rice_parameter_search_dis t": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1691 MpaDecFilter
错误 36 error C2491: "FLAC__stream_encoder_set_total_samples_estimate": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1707 MpaDecFilter
错误 37 error C2491: "FLAC__stream_encoder_set_metadata": 不允许 dllimport 函数的定义
解决方法:一般是本库生成的选项与被调用项目的生成选项不一致造成,即第一点中提到的,都改成一致的一般可以解决问题。
5. error LNK2005: _DllRegisterServer@0 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc
错误 2 error LNK2005: _DllUnregisterServer@0 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc
错误 3 error LNK2005: "int g_cTemplates" (?g_cTemplates@@3HA) 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc
错误 4 error LNK2005: "class CFilterApp theApp" (?theApp@@3VCFilterApp@@A) 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc 错误 5 error LNK2005: "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A) 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc
错误 6 error LNK2005: _DllRegisterServer@0 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 d2vsourceD.lib mplayerc
错误 7 error LNK2005: _DllUnregisterServer@0 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 d2vsourceD.lib mplayerc
………………&h ellip;……………&hell ip;……………… ………………&he llip;……………&helli p;………………& hellip;……………&hel lip;……………&hellip ;………………&h ellip;……………&hell ip;……………… ………………&he llip;…
解决方法:根据提示,确实是在多个项目中都定义,并且编译到目标文件,存细检查了一下,
原因是出错的项目定义了一个REGISTER_FILTER预处理常量,将DllRegisterServer和DllUnregisterServer两个注册方法编译了进去,造成重复。如果是静态引用该项目,将REGISTER_FILTER预处理常量去掉,重新编译即可。
6. error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class
std::basic_string,class std::allocator > &
__thiscall std::basic_string,class
std::allocator >::operator=(wchar_t const *)"
(__imp_??4?$basic_string@_WU?$char_traits@_W@std@@ V?$allocator@_W@2@@std@@Q
AEAAV01@PB_W@Z) lyriclibd.lib mplayerc
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class
std::basic_string,class std::allocator > &
__thiscall std::basic_string,class
std::allocator >::operator=(wchar_t const *)"
(__imp_??4?$basic_string@_WU?$char_traits@_W@std@@ V?$allocator@_W@2@@std@@Q
AEAAV01@PB_W@Z) lyriclibd.lib mplayerc
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class
std::basic_string,class std::allocator > &
__thiscall std::basic_string,class
std::allocator >::operator=(wchar_t const *)"
(__imp_??4?$basic_string@_WU?$char_traits@_W@std@@ V?$allocator@_W@2@@std@@Q
AEAAV01@PB_W@Z) lyriclibd.lib mplayerc
后面还有很多类似的错误。
解决方法:无法解析的外部符号有两种原因,一是头文件定义了但没有实现,二是没有包含库文件,以上错误的原因是C++的库文件没有包含,一般默认是包含了C++引用库的,可能是项目中忽略特定库将时其加入进去忽略掉了,存细检查忽略特定库中是否将C++引用库给忽略掉了,将其从忽略特定库中去掉。(一般是libcmtd.lib 、libcpmtd.lib 、msvcprtd.lib)
7. an application has made an attempt to load the c runtime library without using a manifest
解决办法:找到很多方法都不能解决问题,最后找到一个方法,即在stdafx.h中加入这一行即可解决问题:
(vs2005)
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
Vs2008
#pragmacomment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
8. error LNK2019: 无法解析的外部符号 __imp____lc_codepage,该符号在函数 _mbrtowc 中被引用 mpcvideodecdu.lib
解决方法:存细看了一下,项目mpcvideodec的附加依赖项中添加了两个引用库libgcc.a和libmingwex.a,这两个库不能这样直接引用,这两个文件在下载的源代码的lib目录下有存在,但是不能这样直接引用。使用 vs2008命令提示工具,转到libmingwex.a所在的目录,执行命令lib -remove:mbrtowc.o libmingwex.a,lib -remove:wcrtomb.o libmingwex.lib ,这样就生成文件libmingwex.lib,将libmingwex.lib文件加入附加依赖项即可。
可以参考以下网页:http://ffmpeg.arrozcru.org/forum/viewtopic.php?f=1 &t=891
字符集要统一,或者都为Unicode编码;
MFC的使用,或者都选为在共享DLL中使用MFC;
使用ATL,或者都选中动态链接到ATL;
另外该安装的库要装上,如DirectX,路径要设置好。
2. error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,
error LNK2001: 无法解析的外部符号 __imp__timeGetTime@0
error LNK2019: 无法解析的外部符号 __imp__timeSetEvent@20
解决方法:在出错的项目添加头文件: Mmsystem.h,在引用库中添加:Winmm.lib
3. error C2504: "ICommDlgBrowser2": 未定义基类 c:\program files\microsoft sdks\windows\v6.0a\include\shobjidl.h 6407 TreePropSheet
错误 2 error C2504: "IFileDialogEvents": 未定义基类 d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 235 TreePropSheet
错误 3 error C2061: 语法错误 : 标识符"FDE_SHAREVIOLATION_RESPONSE" d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 244 TreePropSheet
错误 4 error C2061: 语法错误 : 标识符"FDE_OVERWRITE_RESPONSE"d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 246 TreePropSheet
错误 5 error C2504: "IFileDialogControlEvents": 未定义基类 d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 249 TreePropSheet
错误 6 error C2504: "ICommDlgBrowser2": 未定义基类 c:\program files\microsoft sdks\windows\v6.0a\include\shobjidl.h6407 sizecbar
错误 7 error C2504: "IFileDialogEvents": 未定义基类 d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 235 sizecbar
错误 8 error C2061: 语法错误 : 标识符"FDE_SHAREVIOLATION_RESPONSE" d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 244 sizecbar
错误 9 error C2061: 语法错误 : 标识符"FDE_OVERWRITE_RESPONSE"d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 246 sizecbar
错误 10 error C2504: "IFileDialogControlEvents": 未定义基类 d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdlgs.h 249 sizecbar
错误 11 error C2504: "ICommDlgBrowser2": 未定义基类
解决方法:(针对XP系统,其它系统作相应修改)
有两个地方改一下一般可以解决这个问题:
(1). 在StdAfx.h中加入如下两行(针对windows xp系统,不同系统不一样)
#define _WIN32_WINNT 0x0501
#define WINVER 0x0501
(2). shobjidl.h 文件在vc6和vc9中都有,两个文件是有一些区别,使用vc9中就不会有问题,查找到VC9 中shobjidl.h所在位置,加入到包含路径中,如将
C:\Program Files\Microsoft Visual Studio 9.0\VC\include 路径加入到包含路径中。
(3). 引起这个问题的原因可能是如下
http://www.rupeng.com/forum/thread-3214-1-1.html
http://www.easewe.com/Article/document/879.htm
4. 错误 25 error C2491: "FLAC__stream_encoder_set_do_mid_side_stereo": 不允许
dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1515 MpaDecFilter
错误 26 error C2491: "FLAC__stream_encoder_set_loose_mid_side_stereo": 不允许
dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1526 MpaDecFilter
错误 27 error C2491: "FLAC__stream_encoder_set_apodization": 不允许 dllimport 函
数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1538 MpaDecFilter
错误 28 error C2491: "FLAC__stream_encoder_set_max_lpc_order": 不允许 dllimport
函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1609 MpaDecFilter
错误 29 error C2491: "FLAC__stream_encoder_set_qlp_coeff_precision": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1620 MpaDecFilter
错误 30 error C2491: "FLAC__stream_encoder_set_do_qlp_coeff_prec_search": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1631 MpaDecFilter
错误 31 error C2491: "FLAC__stream_encoder_set_do_escape_coding": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1642 MpaDecFilter
错误 32 error C2491: "FLAC__stream_encoder_set_do_exhaustive_model_searc h": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1658 MpaDecFilter
错误 33 error C2491: "FLAC__stream_encoder_set_min_residual_partition_or der": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1669 MpaDecFilter
错误 34 error C2491: "FLAC__stream_encoder_set_max_residual_partition_or der": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1680 MpaDecFilter
错误 35 error C2491: "FLAC__stream_encoder_set_rice_parameter_search_dis t": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1691 MpaDecFilter
错误 36 error C2491: "FLAC__stream_encoder_set_total_samples_estimate": 不允许 dllimport 函数的定义
e:\workdirectory\splayer\src\filters\transform\mpa decfilter\libflac\src\libflac\stream_encoder.c 1707 MpaDecFilter
错误 37 error C2491: "FLAC__stream_encoder_set_metadata": 不允许 dllimport 函数的定义
解决方法:一般是本库生成的选项与被调用项目的生成选项不一致造成,即第一点中提到的,都改成一致的一般可以解决问题。
5. error LNK2005: _DllRegisterServer@0 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc
错误 2 error LNK2005: _DllUnregisterServer@0 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc
错误 3 error LNK2005: "int g_cTemplates" (?g_cTemplates@@3HA) 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc
错误 4 error LNK2005: "class CFilterApp theApp" (?theApp@@3VCFilterApp@@A) 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc 错误 5 error LNK2005: "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A) 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 cddareaderD.lib mplayerc
错误 6 error LNK2005: _DllRegisterServer@0 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 d2vsourceD.lib mplayerc
错误 7 error LNK2005: _DllUnregisterServer@0 已经在 cdxareaderD.lib(CDXAReader.obj) 中定义 d2vsourceD.lib mplayerc
………………&h ellip;……………&hell ip;……………… ………………&he llip;……………&helli p;………………& hellip;……………&hel lip;……………&hellip ;………………&h ellip;……………&hell ip;……………… ………………&he llip;…
解决方法:根据提示,确实是在多个项目中都定义,并且编译到目标文件,存细检查了一下,
原因是出错的项目定义了一个REGISTER_FILTER预处理常量,将DllRegisterServer和DllUnregisterServer两个注册方法编译了进去,造成重复。如果是静态引用该项目,将REGISTER_FILTER预处理常量去掉,重新编译即可。
6. error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class
std::basic_string,class std::allocator > &
__thiscall std::basic_string,class
std::allocator >::operator=(wchar_t const *)"
(__imp_??4?$basic_string@_WU?$char_traits@_W@std@@ V?$allocator@_W@2@@std@@Q
AEAAV01@PB_W@Z) lyriclibd.lib mplayerc
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class
std::basic_string,class std::allocator > &
__thiscall std::basic_string,class
std::allocator >::operator=(wchar_t const *)"
(__imp_??4?$basic_string@_WU?$char_traits@_W@std@@ V?$allocator@_W@2@@std@@Q
AEAAV01@PB_W@Z) lyriclibd.lib mplayerc
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class
std::basic_string,class std::allocator > &
__thiscall std::basic_string,class
std::allocator >::operator=(wchar_t const *)"
(__imp_??4?$basic_string@_WU?$char_traits@_W@std@@ V?$allocator@_W@2@@std@@Q
AEAAV01@PB_W@Z) lyriclibd.lib mplayerc
后面还有很多类似的错误。
解决方法:无法解析的外部符号有两种原因,一是头文件定义了但没有实现,二是没有包含库文件,以上错误的原因是C++的库文件没有包含,一般默认是包含了C++引用库的,可能是项目中忽略特定库将时其加入进去忽略掉了,存细检查忽略特定库中是否将C++引用库给忽略掉了,将其从忽略特定库中去掉。(一般是libcmtd.lib 、libcpmtd.lib 、msvcprtd.lib)
7. an application has made an attempt to load the c runtime library without using a manifest
解决办法:找到很多方法都不能解决问题,最后找到一个方法,即在stdafx.h中加入这一行即可解决问题:
(vs2005)
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
Vs2008
#pragmacomment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
8. error LNK2019: 无法解析的外部符号 __imp____lc_codepage,该符号在函数 _mbrtowc 中被引用 mpcvideodecdu.lib
解决方法:存细看了一下,项目mpcvideodec的附加依赖项中添加了两个引用库libgcc.a和libmingwex.a,这两个库不能这样直接引用,这两个文件在下载的源代码的lib目录下有存在,但是不能这样直接引用。使用 vs2008命令提示工具,转到libmingwex.a所在的目录,执行命令lib -remove:mbrtowc.o libmingwex.a,lib -remove:wcrtomb.o libmingwex.lib ,这样就生成文件libmingwex.lib,将libmingwex.lib文件加入附加依赖项即可。
可以参考以下网页:http://ffmpeg.arrozcru.org/forum/viewtopic.php?f=1 &t=891