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.h 6407 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/mpadecfilter/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/mpadecfilter/libflac/src/libflac/stream_encoder.c 1526 MpaDecFilter
错误 27 error C2491: “FLAC__stream_encoder_set_apodization”: 不允许 dllimport 函
数 的定义
e:/workdirectory/splayer/src/filters/transform/mpadecfilter/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/mpadecfilter/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/mpadecfilter/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/mpadecfilter/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/mpadecfilter/libflac/src/libflac/stream_encoder.c 1642 MpaDecFilter
错误 32 error C2491: “FLAC__stream_encoder_set_do_exhaustive_model_search”: 不允许 dllimport 函数 的定义
e:/workdirectory/splayer/src/filters/transform/mpadecfilter/libflac/src/libflac/stream_encoder.c 1658 MpaDecFilter
错误 33 error C2491: “FLAC__stream_encoder_set_min_residual_partition_order”: 不允许 dllimport 函数 的定义
e:/workdirectory/splayer/src/filters/transform/mpadecfilter/libflac/src/libflac/stream_encoder.c 1669 MpaDecFilter
错误 34 error C2491: “FLAC__stream_encoder_set_max_residual_partition_order”: 不允许 dllimport 函数 的定义
e:/workdirectory/splayer/src/filters/transform/mpadecfilter/libflac/src/libflac/stream_encoder.c 1680 MpaDecFilter
错误 35 error C2491: “FLAC__stream_encoder_set_rice_parameter_search_dist”: 不允许 dllimport 函数 的定义
e:/workdirectory/splayer/src/filters/transform/mpadecfilter/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/mpadecfilter/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
………………………………………………………………………………………………………………………………………………………………………………………………………………
解决方法:根据提示,确实是在多个项目中都定义,并且编译到目标文件,存细检查了一下,
原因是出错的项目定义了一个REGISTER_FILTER预处理常量,将DllRegisterServer和DllUnregisterServer两个注册方法编译了进去,造成重复。如果是静态引用该项目,将REGISTER_FILTER预处理常量去掉,重新编译即可。
6. error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class
std::basic_string
__thiscall std::basic_string
std::allocator
(__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
__thiscall std::basic_string
std::allocator
(__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
__thiscall std::basic_string
std::allocator
(__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
#pragma comment(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