射手播放器编译错误解决方法(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.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
文件在vc6vc9中都有,两个文件是有一些区别,使用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预处理常量,将DllRegisterServerDllUnregisterServer两个注册方法编译了进去,造成重复。如果是静态引用该项目,将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

#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.alibmingwex.a,这两个库不能这样直接引用,这两个文件在下载的源代码的lib目录下有存在,但是不能这样直接引用。使用 vs2008命令提示工具,转到libmingwex.a所在的目录,执行命令lib -remove:mbrtowc.o libmingwex.alib -remove:wcrtomb.o libmingwex.lib ,这样就生成文件libmingwex.lib,将libmingwex.lib文件加入附加依赖项即可。

可以参考以下网页:http://ffmpeg.arrozcru.org/forum/viewtopic.php?f=1&t=891

你可能感兴趣的:(射手播放器编译错误解决方法(splayer))