射手播放器编译错误解决方法(splayer)


  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

猜你喜欢

转载自liuweimo.iteye.com/blog/1572104