﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-iwindows-随笔分类-Open Source</title><link>http://www.cppblog.com/iwindows/category/14291.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 10 Oct 2012 09:47:54 GMT</lastBuildDate><pubDate>Wed, 10 Oct 2012 09:47:54 GMT</pubDate><ttl>60</ttl><item><title>gSoap 编译环境搭建</title><link>http://www.cppblog.com/iwindows/archive/2012/10/10/193111.html</link><dc:creator>vic.MINg</dc:creator><author>vic.MINg</author><pubDate>Wed, 10 Oct 2012 06:25:00 GMT</pubDate><guid>http://www.cppblog.com/iwindows/archive/2012/10/10/193111.html</guid><wfw:comment>http://www.cppblog.com/iwindows/comments/193111.html</wfw:comment><comments>http://www.cppblog.com/iwindows/archive/2012/10/10/193111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iwindows/comments/commentRss/193111.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iwindows/services/trackbacks/193111.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://sourceforge.net/projects/gsoap2 下载最新的gSoap&nbsp;在其目录下找到VisualStudio2005 可以直接在Windows环境下编译该文件阅读readme.txt 需要安装bison和flex 两个编译软件。分别在以下两个链接中下载。http://gnuwin32.sourceforge.net/packages/bi...&nbsp;&nbsp;<a href='http://www.cppblog.com/iwindows/archive/2012/10/10/193111.html'>阅读全文</a><img src ="http://www.cppblog.com/iwindows/aggbug/193111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iwindows/" target="_blank">vic.MINg</a> 2012-10-10 14:25 <a href="http://www.cppblog.com/iwindows/archive/2012/10/10/193111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2005 编译 Media Player Classic</title><link>http://www.cppblog.com/iwindows/archive/2010/07/22/121062.html</link><dc:creator>vic.MINg</dc:creator><author>vic.MINg</author><pubDate>Thu, 22 Jul 2010 13:22:00 GMT</pubDate><guid>http://www.cppblog.com/iwindows/archive/2010/07/22/121062.html</guid><wfw:comment>http://www.cppblog.com/iwindows/comments/121062.html</wfw:comment><comments>http://www.cppblog.com/iwindows/archive/2010/07/22/121062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iwindows/comments/commentRss/121062.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iwindows/services/trackbacks/121062.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt"><span style="COLOR: #000080"><strong>一 编译工具及环境<br></strong></span></p>
<blockquote style="MARGIN-RIGHT: 0px" dir=ltr>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">操作系统：Windows XP SP2、SP3</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">开发环境：Visual Studio 2005 Professional</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">版本控制工具：TortoiseSVN</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">说明：用来下载程序源代码，直接选检出，然后输入</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt"><a href="https://guliverkli.svn.sourceforge.net/svnroot/guliverkli/trunk/guliverkli/">https://guliverkli.svn.sourceforge.net/svnroot/guliverkli/trunk/guliverkli/</a></p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">这个地址（源代码地址）把代码检出到本地。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">SDK：</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">1. DirectX 9 SDK（需要DirectShow）</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">说明：DirectX SDK Summer 2004之后DirectShow不被整合到DirectX SDK中而是以Extras</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">的形式发布，它的最后一个版本为DirectX SDK Extras 2005,2 版。之后它被整合到Windows SDK中。而VS2005的WinSDK中不包含DirectShow。方便起见我下载的老版本DirectX 9.0b SDK。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">地址：<a href="http://www.directshow.cn/SDK/DX9SDK.rar">http://www.directshow.cn/SDK/DX9SDK.rar</a> </p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">2. Windows Media Format SDK 9</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">地址：<a href="http://download.microsoft.com/download/3/0/4/30451651-9e47-4313-89a3-5bb1db003c26/WMFormatSDK.exe">http://download.microsoft.com/download/3/0/4/30451651-9e47-4313-89a3-5bb1db003c26/WMFormatSDK.exe</a></p>
</blockquote>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt"><strong style="COLOR: #000080">二 开发环境搭建</strong></p>
<blockquote style="MARGIN-RIGHT: 0px" dir=ltr>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">也就是包含一下刚刚提到的SDK目录，下载安装所需SDK，由于源代码的文档中提到</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt"><span style="COLOR: #008000">&#8220;you may need to add "Debug Unicode" and "Release Unicode" configs to the project file of the directshow baseclasses&#8221;<span style="COLOR: #000000">，</span></span>所以需要先编译DirectShow中的BaseClasses程序。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">编译时需要在VS2005的包含文件里添加</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">X:\DXSDK\Include</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">X:\DXSDK\Samples\C++\DirectShow\BaseClasses</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">步骤：工具=&gt;选项=&gt;项目和解决方案=&gt;VC++目录=&gt;包含文件</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">因为BaseClasses代码中都是用&lt;&gt;包含的头，所以我把本身的路径加到了系统中。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">编译BaseClasses时大概会发生三类错误：</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">1. 提示POINTER_64未定义</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">原因：这是由于PlatformSDK和DirectXSDK中的同名头文件basetsd.h冲突造成的，PlatformSDK中的定义了POINTER_64而DirectXSDK没有定义却默认先编译，导致winnt.h中找不到POINTER_64。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">解决办法：在刚提到的包含文件中确保系统文件在上边，然后</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">右键=&gt;工程=&gt;属性=&gt;C/C++=&gt;常规中清空附加包含目录（因为会优先编译这里的路径）。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">2. 返回值默认不为int</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">原因：VS2005相对于VS2003和VC6编译相对严格，函数无返回值不能默认为<span style="COLOR: #0000ff">int</span>。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">解决方法：将提示错误的<span style="COLOR: #0000ff">operator</span>=(<span style="COLOR: #0000ff">LONG</span>);加返回值int，因为我没找到此重载的实现，返回什么无所谓了。或者右键=&gt;工程=&gt;属性=&gt;C/C++=&gt;命令行中附加选项添加/wd4430使其默认返回<span style="COLOR: #0000ff">int</span>。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">3. 未定义的局部变量</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">原因：也是由于VS2005之前版本在for中定义的变量看做是for外定义可以拿到循环以外使用，而VS2005不可以。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">解决方法：将其报错地方的定义，拿到<span style="COLOR: #0000ff">for</span>外定义。或者右键=&gt;工程=&gt;属性=&gt;C/C++=&gt;语言中的强制<span style="COLOR: #0000ff">for</span>循环范围中的一致性选否。还有一处<span style="COLOR: #0000ff">static</span>变量加上DWORD定义就可以了。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">这样基本就可以编译通过了。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">然后将Debug Unicode 和 Release Unicode目录包含到系统中。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">步骤：工具=&gt;选项=&gt;项目和解决方案=&gt;VC++目录=&gt;包含库</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">然后还需要包含几个文件和库，具体如下图</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt; MARGIN-RIGHT: 0px" dir=ltr><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/iwindows/MediaPlayerClassic01.png" width=555 height=307><br><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/iwindows/MediaPlayerClassic02.png" width=555 height=306><br><br>为了以后方便DirectShow的开发我把可能用到的都加在了里边。</p>
</blockquote>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt"><strong style="COLOR: #000080">三 编译Media Player Classic</strong></p>
<blockquote style="MARGIN-RIGHT: 0px" dir=ltr>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">1. 编译顺序</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; HowToCompile中提到要按照一定顺序编译才可以成功。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 而且在调试阶段我统一以Debug Unicode形式编译。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 顺序如下：</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 1. deccs</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 2. dsutil</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 3. ui (run \lib\ui.bat to merge them)</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 4. subpic</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 5. subtitles</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 6. filters (for mpc only build those configurations which output a lib, the rest outputs stand-&nbsp;&nbsp; alone filters)</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 7. apps\mplayerc</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">2. 编译时遇到的问题和解决方法</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 按照编译顺序一一解决</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; ① 编译deccs通过。在lib目录里生成decssDU.lib。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; ② 编译dsutil通过。在lib目录里生成dsutilDU.lib。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; ③ 编译ui通过。在lib目录里声称sizecbarDU.lib、ResizableLibDU.lib、CmdUIDU.lib、&nbsp;&nbsp; TreePropSheetDU.lib。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; ④ 编译subpic通过。在lib目录里生成subpicDU.lib。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; ⑤ 编译 subtitles出现好多错误。查看源代码发现字符数组定义有问题，缺少 ' 。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; 解决方法：在CCDecoder.cpp中第127行定义的<span style="COLOR: #0000ff">static</span> WCHAR charmap[0x60]把其初始化&nbsp;&nbsp; 中的?都补上右侧的 ' 。通过之后在lib目录里生成libssfDU.lib和subtitlesDU.lib。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; ⑥ 编译filters（Debug Unicode Lib形式） 失败。好多提示无法打开文件strmbaseDU.lib。还有许多关于Ap4文件没找到的错误。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">解决方法：不知道为什么最新下载的MPC源代码会缺少以前的几个项目如图：<br><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/iwindows/MediaPlayerClassic03.png" width=506 height=330><br><br><br>strmbaseDU.lib就是以前BaseClasses生成的，不过没关系这个应该和刚刚编译DirectShow中的BaseClasses是同样的，刚刚已经包含了Debug Unicode只不过那个生成文件名为strmbasd.lib，只要复制一份strmbaseDU.lib就可以了。其他版本的编译同理。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">AP4文件那个需要把</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">X:\guliverkli\src\filters\parser\mp4splitter\AP4\Update\v0.6.3\Bento4_0.6.3-001.7z解压后把</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">Source文件夹拷贝到X:\guliverkli\src\filters\parser\mp4splitter\AP4\ 目录下。再用</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">X:\guliverkli\src\filters\parser\mp4splitter\AP4\Update\v0.6.3\Source文件夹去覆盖更新一下。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">继续编译，FLVSplitter.h中出现两个错误提示找不到VP62.h和VP62.cpp。进入报错代码，注释着//comment this out if you don't have VP62.cpp/h，所以将此行注释掉就可以了，并在项目文件列表中将VP62.h和VP62.cpp从项目中移除。重新编译这个项目，通过。在lib目录中生成FLVSplitterDU.lib、TreePropSheetDU.lib、MP4SplitterDU.lib等等多个lib文件。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">&nbsp; ⑦编译mplayerc出现三个错误。一个是SubmitNotPlayFileDlg.cpp未找到，另两个是错误D3D9b_SDK_VERSION和MixerPref9_RenderTargetYUV未声明的标识符。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">解决方法：找到mpayerc项目中的SubmitNotPlayFileDlg.cpp和SubmitNotPlayFileDlg.h从该项目移除。然后到vmr9.h中找到enum __MIDL___MIDL_itf_vmr9_0012_0001这个枚举在最后添加MixerPref9_RenderTargetYUV = 0x00002000。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">最后在d3d9.h中加入#<span style="COLOR: #0000ff">define</span> D3D9b_SDK_VERSION 32&nbsp; (常量有可能不准确)。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">继续编译，提示无法打开文件RadGtSplitterDU.lib，由于这个项目已经没有了，所以去连接器中把包含去掉。步骤：右键mplayerc项目 工程=&gt;属性=&gt;连接器=&gt;输入，在附加依赖项中把RadGtSplitterDU.lib去掉。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">继续编译，成功。Mplayerc下的Debug Unicode目录会生成mplayerc.exe。</p>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">运行，会出现以下图示，到此Media Player Classic编译成功。</p>
<blockquote style="MARGIN-RIGHT: 0px" dir=ltr>
<blockquote style="MARGIN-RIGHT: 0px" dir=ltr>
<blockquote style="MARGIN-RIGHT: 0px" dir=ltr>
<blockquote style="MARGIN-RIGHT: 0px" dir=ltr>
<p style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt"><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/iwindows/MediaPlayerClassic04.png" width=555 height=401><a href="http://blog.csdn.net/wuxiao0313/archive/2009/11/08/4784853.aspx"></a></p>
</blockquote></blockquote></blockquote></blockquote></blockquote>
<img src ="http://www.cppblog.com/iwindows/aggbug/121062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iwindows/" target="_blank">vic.MINg</a> 2010-07-22 21:22 <a href="http://www.cppblog.com/iwindows/archive/2010/07/22/121062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>