zoukankan      html  css  js  c++  java
  • win7下编译chromium

    chromium(http://www.chromium.org/Home)是google chrome浏览器的开发版,极具研究价值,是学习c++代码和desktop程序框架的好东西。当然如果想研究浏览器技术,chromium更是必看的代码。本文主要介绍chromium在win7上基于Visual Studio平台的编译,稍后随着对chromium研究的深入,会记录更多的学习总结。

        一、准备条件
        首先要说的是chromium的代码维护和编译还是很方便的,google的工具做的非常好。
        但是,chromium的代码量非常大(包括第三方库大于2G),编译时会生成约5000个目标文件,约100个库文件,因此对编译环境的要求很高。需要确认的准备条件如下:
        1,需要支持64位的系统,原因是编译链接时需要4G以上的内存,因此最好不要用winxp。
        2,需要大于60G的硬盘空间,这是官方的要求,我build debug版以后,大概占用了25G。当然,还要预留出安装vs2010和其他sdk的空间。
        3,越多越好的cpu和内存,否则build会很痛苦。
        4,通畅的网络,速度要快,且不要频繁被墙,获取源码的时候很重要。

        二、基本步骤
        详细说明之前先来了解基本步骤,心里有个谱。
        1,安装vs2010及SP1;
        2,安装Win8 SDK;
        3,安装June 2010 DirectX SDK;
        4,获取source code;
        5,生成makefile及工程文件;
        6,build,运行。

        三、动手
        终于开始动手了,不过还要先下载需要的安装包(具体参考http://dev.chromium.org/developers/how-tos/build-instructions-windows),包括:vs2010(我装的Ultimate版),vs2010 SP1Win8 SDKDirectX SDK
        1,安装vs2010及SP1
        需要说明的是vs2010和vs2005,vs2008都不冲突的,直接装即可。为了节省硬盘空间,安装的时候可以选择只安装C++和C#的支持,C++下面有个x64编译的支持选项一定保留。
        另外一个注意的地方是,安装完vs2010首次启动时,会提示选择是否从之前的vs版本继承配置参数,我的建议是不选择,防止vs2005或vs2008中的配置捣乱,后面还涉及到一个修改的动作与此有关。
        2,安装Win8 SDK
        这一步也很简单,安装时可能会提示没有安装.Net framework 4.5,不用管,继续安装即可。
        另外请注意安装到默认路径“C:Program Files (x86)Windows Kits8.0”,否则需要手动配置环境变量。
        3,安装DirectX SDK
        安装时如果出现“Error Code: S1023”错误,请将“Microsoft Visual C++ 2010 x64 Redistributable”和“Microsoft Visual C++ 2010 x86 Redistributable”都卸载,如果还想用装完DirectX SDK后可以重新安装。
        此时所需的编译环境和sdk都已安装完毕,但还需要配置一下vs2010的环境。在vs2008等环境中,我们可以在“Tools -> Options -> Projects and Solutions -> VC++ Directories”设置引用的头文件和库文件目录,不过vs2010去掉了这个功能。我们需要用其他的办法达到这个效果,将dxsdk目录加入到环境中。
        进入你的用户目录下的“AppDataLocal”目录,或者按Win+R键输入“%LOCALAPPDATA%”回车,在下面的“MicrosoftMSBuildv4.0”目录中有两个文件:“Microsoft.Cpp.Win32.user.props”和“Microsoft.Cpp.x64.user.props”。我们通过修改这两个配置文件引用dxsdk目录。注意如果没有MSBuild目录,请先运行一次vs2010就会自动生成。
        由于这个目录在win7下需要有管理员权限才能修改,因此需要用管理员权限打开文本编辑软件加载这两个文件。或者在开始菜单中搜索“cmd”,选择cmd.exe右键“以管理员身份运行”,输入类似“notepad C:UsersmynameAppDataLocalMicrosoftMSBuildv4.0Microsoft.Cpp.Win32.user.props”的命令行,启动记事本编辑保存。改动如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <IncludePath>$(DXSDK_DIR)include;$(IncludePath)</IncludePath>
        <LibraryPath>$(DXSDK_DIR)libx86;$(LibraryPath)</LibraryPath>
      </PropertyGroup>
    </Project> 

    将红色部分添加进文件。“Microsoft.Cpp.x64.user.props”文件的修改类似,将“x86”改为“x64”。
        4,Win8 SDK补丁
        Win8 SDK头文件asyncinfo.h中定义了一种vs2010不支持的类型,编译chromium的时候需要将这个文件修改一下。文件路径:C:Program Files (x86)Windows Kits8.0Includewinrtasyncinfo.h,第66行按如下所示修改

    #pragma once
     #ifdef __cplusplus
     namespace ABI { namespace Windows { namespace Foundation {
     enum AsyncStatus {
     enum class AsyncStatus {
       Started = 0,
       Completed, 
       Canceled,

    将class关键字注释掉即可。同样,如有权限问题按前述的方法进行修改。
        5,获取代码
        chromium的代码库是通过git和svn进行管理的,维护时还配合一系列的python脚本。google官方不推荐直接用git或svn来check out代码,那样速度将会非常慢。比较好的做法是先下载一个源码压缩包,然后再更新代码。
        首先下载源码包2G多一点),然后解压缩,为方便后续描述,我们定义这个目录在“D:chromium”。(注意该目录尽量不包含空格和中文,以免出现异常情况。) 解压的过程很漫长,完毕后源码都在“D:chromiumhomesrc_tarball arballchromiumsrc”这个目录下。你会发现其中已经包含了svn文件,这样我们就可以用google的工具depot_tools来同步最新的代码了。
        depot_tools是一个管理代码脚本集,可以checkout、生成工程文件、提交review代码等。windows下安装很简单,只需要下载depot_tools包,解压到某目录下,然后将该目录添加到系统环境变量Path中即可。
        安装好后,启动一个cmd,进入depot_tools目录运行“gclient”命令。该命令将更新depot_tools内的脚本,并负责安装配置git、svn、pyhton等工具,因此时间会比较长,耐心等待。
        启动一个cmd,进入chromium代码目录“D:chromiumhomesrc_tarball arballchromiumsrc”,运行命令“gclient sync --force”,将会进行代码更新及第三方代码库的更新,并生成工程文件。实际上,该命令首先根据.glcient文件设置代码库参数,然后搜索所有的DEPS文件,根据文件中的列表下载源代码(根据平台下载本平台支持的代码);之后会执行“gclient runhooks”命令的内容,生成平台支持的工程文件。如果我们不想更新代码,不运行“gclient sync”而直接运行“gclient runhooks”也可以,这样直接生成工程文件。这一步时间会更久一些,一定要耐心。(后续再更新代码可以去掉--force参数)
        不过由于网络或网站的原因,有时一些代码或工具下载会失败,导致sync error。比如我这里就出现“download_nacl_toolchains.py”返回失败的现象,原因是到“commondatastorage.googleapis..com”下载native client支持的工具包(共4个)时失败,请参考这篇文章中的方法,基本思路就是找到工具包下载地址,手动下载后再放到相关目录下执行。[注]:以上问题追踪发现原因的https地址下载失败率比较高,尝试改为http下载方式后成功。具体方法为:打开“D:chromiumhomesrc_tarball arballchromiumsrc ative_clientuild oolchainbinaries.py”文件,将头部的“BASE_DOWNLOAD_URL”和“BASE_ONCE_DOWNLOAD_URL”定义中的https改为http即可。
        如果想生成makefile等文件,可以进入代码目录“D:chromiumhomesrc_tarball arballchromiumsrc”,运行命令“gclient runhooks”,chromium将用GYP文件生成makefile和工程文件。同样是漫长的等待。不过执行该步骤前,请先参考执行第6步的“component build”设置
        6,编译
        开始编译前还要做一个动作,设置“component build”(也叫“shared library”或“multi-dll build”),即将chrome默认build一个静态库改为编译多个动态库,原因是默认编译静态库时,将会生成一个非常大的“chrome_dll.pdb”文件(超过1G),而vs2010不支持生成超过1G的文件。
        具体方法请参考官方说明Component build / Shared Library / Multi-DLL build,采用的是第3种方法,
    即在D:chromiumhomesrc_tarball arballchromium”目录下新建一个“chromium.gyp_env”文件,在其中输入“{'GYP_DEFINES': 'component=shared_library'} # use space to delimit additional defines.”保存。然后再执行“gclient runhooks”重新生成工程文件。
        OK,现在打开“D:chromiumhomesrc_tarball arballchromiumsrcchromechrome.sln”文件编译吧,这次的时间更长(这里竟然有6个小时),但编译成功的喜悦更重要,如果编译的是debug,那么在“D:chromiumhomesrc_tarball arballchromiumsrcuildDebug”下已经生成了chrome.exe,运行一下看看效果吧!

        chromium代码是非常值得研究的,chrome是基于webkit的,对于webkit的研究是重中之重。源码目录下“srcwebkitwebkit.sln”中有个test_shell工程,是一个最简单的基于webkit的浏览器,可以从这里入手。
  • 相关阅读:
    [No000037]操作系统Operating Systems操作系统历史与硬件概况History of OS & Summaries!
    [No000036]操作系统Operating Systems系统调用的实现System_Call
    [No000035]操作系统Operating System之OS Interface操作系统接口
    [No000034]知乎-长期接收碎片化知识有什么弊端?
    [No000033]码农网-如何锻炼出最牛程序员的编码套路
    [No000032]程序员的年龄天花板
    [No000031]操作系统 Operating Systems 之Open the OS!
    [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天
    [No00002F]3步,教你如何分解需求
    [No00002E]关于大数据,你不知道的6个迷思
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318724.html
Copyright © 2011-2022 走看看