pzg's blog

在windows环境下编译chrome

编译环境

设置环境为Visual Studio 2010中

必备软件:
Windows 7或更高版本。
64位操作系统的 强烈 推荐,因为建立在32位操作系统正在不断变得更难,是慢了很多,不积极维护。
至少60 GB的在NTFS卷的可用空间。提示:有一个SSD驱动器的铬源大大加快构建时间。
的Visual Studio 2010专业版或标准。
Windows 8的SDK。
2010年6月的DirectX SDK。
(可选)的Git的Windows(又名msysgit)或 Cygwin的 ,以提供一个更类似UNIX的开发环境。Msysgit被支撑为depot_tools的一部分; cygwin的支承在一个更特定方式。

安装 Visual Studio 2010中
确保安装“X64编译器和工具” 。
安装VS2010 SP1 。

安装 Windows 8的SDK。

注:如果您安装SDK比不同的路径 C:\程序文件(x86)\的Windows工具包\ 8.0,你需要设置以下以下环境变量:GYP_DEFINES = windows_sdk_path =“路径SDK中的”

 

安装2010年6月的DirectX SDK的
注意事项:如果安装失败,出现“错误代码:S1023”您可能需要卸载“微软的Visual C + + 2010 x64的可再发行”。看到这个提示从

打补丁的Windows 8 SDK构建与Visual C + + 2010

的使用WinRT的头铬构建部件包含在Windows 8 SDK。我们使用的所有头文件,包括WRL,可以编译使用Visual C + + 2010中,除了一个文件,asyncinfo.h的。此文件使用一个强类型的枚举该VS2010的编译器不知道。要解决这个当时,一小片需要被应用到Windows 8 SDK来建立与在VS2010的WinRT的标题:

补丁包含\的WinRT \ asyncinfo.h
索引:asyncinfo.h
================================================== =================
— asyncinfo.h
+ + + asyncinfo.h
@ @ -63,7 +63,7 @ @
的#pragma一次
的#ifdef __ CPLUSPLUS
命名空间的ABI {命名空间的Windows命名空间{{基金会
– 枚举类AsyncStatus {
+枚举/ *类* / AsyncStatus {
开始= 0,
完成后,
取消,

这个补丁应该应用到文件“包含\的WinRT \ asyncinfo.h”位于Windows 8 SDK目录。如果这个补丁不适用,铬的使用WinRT的头的部分将无法编译。

注:默认情况下,Windows 8的SDK将安装到C:\程序文件(x86)\的Windows工具包\ 8.0 \。该目录将需要管理员权限才能写入。最容易做应用这个补丁的方法是启动管理命令提示符下,cd到 C:\程序文件(x86)\的Windows工具包\ 8.0 \包含\的WinRT \, 运行NOTEPAD.EXE asyncinfo.h 并注释掉或删除单词上线66“类”。

注:对于Google员工,这个补丁已经应用到你的SDK,一切都应该只是工作。

(可选)安装的Git的Windows外壳程序和/或 安装Cygwin。
设置环境建设与Visual C + + 2010 Express或Windows 7.1 SDK
必备软件:
Windows 7或更高版本。
64位操作系统的 强烈 推荐,因为建立在32位操作系统正在不断变得更难,是慢了很多,不积极维护。
至少60 GB的在NTFS卷的可用空间。提示:有一个SSD驱动器的铬源大大加快构建时间。
双方 的Windows SDK 7.1 和 Windows 8的SDK。
2010年6月的DirectX SDK。
Windows驱动程序工具包7.1。
(可选)Visual Studio 2010的快车。
(可选) 的Git的Windows(又名msysgit) 或 Cygwin的 ,以提供一个更类似UNIX的开发环境。Msysgit被支撑为depot_tools的一部分; cygwin的支承在一个更特定方式。

安装的Visual C + + 2010 Express和Windows 7.1 SDK。安装顺序是非常重要的。
(可选)安装的Visual C + + 2010速成
安装 的Windows SDK 7.1。确保x64编译器和安装工具。
(可选,仅当您使用 的Visual C + + 2010速成) 安装 VS2010 SP1。
安装 的Windows SDK 7.1的Visual C + + 2010 SP1编译器更新。
创建一个空的“C:\程序文件(x86)\微软的Visual Studio 10.0 \ VC \ INCLUDE \ ammintrin.h”文件。安装上一步的更新不包括由于某种原因,此标准头文件。标题应宣布不使用铬代码的AMD专用上交所内部函数。运行以下命令以管理员身份创建文件:回声。>“ C:\程序文件(x86)\微软的Visual Studio 10.0 \ VC \ INCLUDE \ ammintrin.h“

 

安装了 Windows 8的SDK。注:如果你安装SDK比不同的路径 C:\程序文件(x86)\的Windows工具包\ 8.0 ,你需要设置以下以下环境变量:GYP_DEFINES = windows_sdk_path =“路径SDK中的”

 

 

打补丁的Windows 8 SDK构建与Visual C + + 2010

的使用WinRT的头铬构建部件包含在Windows 8 SDK。我们使用的所有头文件,包括WRL,可以编译使用Visual C + + 2010中,除了一个文件,asyncinfo.h的。此文件使用一个强类型的枚举该VS2010的编译器不知道。要解决这个当时,一小片需要被应用到Windows 8 SDK来建立与在VS2010的WinRT的标题:

补丁包含\的WinRT \ asyncinfo.h
索引:asyncinfo.h
================================================== =================
— asyncinfo.h
+ + + asyncinfo.h
@ @ -63,7 +63,7 @ @
的#pragma一次
的#ifdef __ CPLUSPLUS
命名空间的ABI {命名空间的Windows命名空间{{基金会
– 枚举类AsyncStatus {
+枚举/ *类* / AsyncStatus {
开始= 0,
完成后,
取消,

这个补丁应该应用到文件“包含\的WinRT \ asyncinfo.h”位于Windows 8 SDK目录。如果这个补丁不适用,铬的使用WinRT的头的部分将无法编译。

注:默认情况下,Windows 8的SDK将安装到C:\程序文件(x86)\的Windows工具包\ 8.0 \。该目录将需要管理员权限才能写入。最容易做应用这个补丁的方法是 启动管理命令提示符下,cd到 C:\程序文件(x86)\的Windows工具包\ 8.0 \包含\的WinRT \, 运行 NOTEPAD.EXE asyncinfo.h 并注释掉或删除单词上线66“类”。

注:对于Google员工,这个补丁已经应用到你的SDK,一切都应该只是工作。

安装 2010年6月的DirectX SDK的
注意事项:如果安装失败,出现“错误代码:S1023”您可能需要卸载“微软的Visual C + + 2010 x64的可再发行”。看到这个提示从

安装Windows驱动程序工具包 ,并 创建一个名为系统范围的环境变量 WDK_DIR 通过运行… – > SystemPropertiesAdvanced – >环境变量- >新建…(在系统变量),用的名称 WDK_DIR 和你的位置安装WDK(例如C:\ WINDDK \ 7600.16385.1)。

设置以下环境变量:GYP_MSVS_VERSION = 2010E

 

(可选)见 编译Chromium使用MSBuild下面的说明如何建立命令行,忍者打造的作品也是如此。
简化自动安装工具链

此方法是上述1的自动版本。它会自动安装编译器,软件开发工具包和补丁,但不安装任何IDE。

你只能建立与使用这些步骤忍者。

如果您已经安装了Visual Studio中,你仍然可以使用它来调试,但不建。

必备软件:
的Windows 7 x64或更高版本。x86的操作系统是不支持的。
获取铬depot_tools 。
运行“ gclient “一次。这将确保你有蟒蛇,GIT,和svn使用。
按照以下步骤检查出的代码,无论是使用Subversion的指示或Git的指令, 但不要“ gclient同步“呢。
颠覆: http://dev.chromium.org/developers/how-tos/get-the-code
Git的: https://code.google.com/p/chromium/wiki/UsingGit
运行
蟒蛇的src \工具\ WIN \工具链\ toolchain.py
cygwin的内部由于权限问题这个不能运行。
这将需要2-15分钟,视下载速度,并创建一个win_toolchain 对含铬建设所需的工具和头文件。
win_toolchain \ env.bat
CD SRC
gclient同步
忍者-C出\调试铬
见 http://crrev.com/175004 更多的细节。
建筑铬

获取铬depot_tools 。
退房的源代码 使用直接使用svn或git的结帐。不要使用压缩包,因为它是不符合Windows的svn客户端兼容。
安装API密钥。
然后用 忍者 来构建:

忍者-C出\调试铬

(忍者应该与depot_tools),并可运行出结果:

出\调试\的chrome.exe

在Visual Studio中

您可以使用:

集GYP_GENERATORS = MSVS忍者,忍者

进而

gclient runhooks

构建一个包装器的Visual Studio解决方案,炮弹忍者构建来完成实际的构建。此溶液可用于浏览有用。

在Visual Studio号楼(原生)

您可以尝试建立在Visual Studio。这种配置是未经测试,绝 ​​对行不通构建所有镀铬的。一些小的子目标可以工作。这也是有用的只是浏览,如果你喜欢的Visual Studio,但一般建筑不工作。
在您的环境设置GYP发生器(否则,它将使代替。SLN忍者文件)。在命令提示符下: 设置GYP_GENERATORS = MSVS

 

设置组件的构建 (或者创建chrome_dll.pdb可能会失败laterl): 设置GYP_DEFINES =分量= shared_library

 

重新构建文件运行: gclient runhooks -力

 

打开铬/ chrome.sln在Visual Studio解决方案文件,并生成解决方案。这可能需要10分钟至2小时。更有可能的是1小时。
如果你只是想在Chromium浏览器,并没有测试,你可以通过右键单击加快构建镀铬溶液中的资源管理器,选择项目的构建。您可能希望确保这个项目是启动项目(这将显示为粗体)通过右键单击它并选择设为启动项目。这将使铬(而不是一些随机试验)建立和当您按下运行F5键。
加快构建

准备:整体解决方案的构建可以利用小时数较长,如果配置不正确。
以递减顺序加速的:

使用真正的多核处理器,即英特尔的Core Duo或更高版本(不是奔腾4 HT)。
使用一个x64操作系统(否则增量链接被禁用)。
至少有8 GB的RAM。如果您有少于4 GB,您可能会发现建立比登天慢。
打开预编译头文件 和组件的构建。
使用的src /构建/ some.gyp 只加载您所关心的目标。
禁用您的防病毒软件。之流,。PDB,,CC,·H文件,只检查对病毒修改。禁用扫描在您的来源所在的目录。
存储和构建铬代码,不具有交换(控制面板 – >系统和安全 – >系统 – >高级 – > Performance/Settings->高级 – >虚拟内存/更改)第二个硬盘驱动器上。编译和链接使用了大量的内存和磁盘I / O。这不是有I / O的情况发生,该内存管理器使用的交换同一个磁盘上的一个不错的主意。
请考虑使用忍者 -这是一个替代的命令行构建工具,它比Visual Studio中快得多,特别是对于增量构建。
减少并行编译的数目:避免内存交换不惜任何代价!铬需要大量的内存来链接,如果您同时建立了太多的子项目你的电脑会因为在争抢内存连接器的连接阶段慢如蜗牛。进入MSVC的工具\选项\项目和解决方案\生成和运行,并降低“建立最大并行项目数”。默认情况下它等于虚拟处理器的数量(例如8的四核HT CPU)。12 GB的RAM建议的数量低于8(见这里的讨论)。如果你有较少的RAM使用一个更小的数目。
您可能还需要调整您的include.gypi文件,以限制催生的cl.exe进程的数量,减少上下文切换(见这里的讨论)。例如,要限制只有5的cl.exe和5连接器,你的主文件夹的石膏下include.gypi应该有{ ‘变量’:{ ‘msvs_multi_core_compile“:0, } ‘target_defaults“:{ “msvs_settings’: { ‘VCCLCompilerTool“:{ “AdditionalOptions’:[‘/ MP5’], }, }, },}

 

 

 

 

 

 
定期整理硬盘。
你可能想尝试 增量链接 ,如果你喜欢冒险,或使用忍者。这使得连接非常快,当你工作增量,但在Visual Studio中有些脆弱,你可能需要做次清洗后同步,以避免虚假错误。
官方/ WPO / LTCG编译:
要启用全程序优化/链接时代码生成,一定要设置环境变量:
设置GYP_DEFINES =品牌=铬buildtype =官方
如果你有内部结账,使用 Chrome浏览器,而不是铬来获得谷歌Chrome浏览器的资源。
gclient runhooks
忍者-C出\发布Chrome
该WPO配置设置中定义release_impl_official.gypi。
单元测试

一些单元测试(如gfx_unittests)至少需要Vista/2008与平台更新 安装或Windows 7中执行所有测试完全。
其他技巧

请参阅 Visual Studio的宏页和调试页面。
博客文章上设置一个右手打印边距
运行Chromium
在 镀铬的。exe可执行文件可以在这里找到的src /编译/调试/ 镀铬的。exe或SRC /构建/发布/ 镀铬。exe文件,这取决于所选的生成配置。

由于铬的独特架构,有许多与发展有关的特殊挑战。见调试铬 获取更多信息。

一旦你适应了建设铬,阅读贡献代码页关于编写代码的铬和促进它的信息。

包装

如果你想你的编译打包成一个zip文件,请执行以下操作:

CD /路径/到/ SRC
/铬/工具/构建/赢/ make_zip.sh建立/释放我,铬

这将创建我- 铬拉链。。您可以更改发布到调试,如果你想压缩了调试版本代替。
故障排除

建立在Vista失败

如果你建立在Vista上,注意安全问题。请确保您签出您的文件的文件夹是可写的用户和不仅为管理员。
编译失败

想想,当你有怪异的编译失败的一些共性的东西:

如果你碰巧已签出安装构建的先决条件(Visual Studio中,SDK,以及所有的补丁)之前的源代码,你需要通过退出Visual Studio中,然后运行“重新生成VS解决方案文件gclient runhooks “。
有时候Visual Studio中做了错误的事情铬建设时并卡住假错误。这方面的一个很好的迹象是,如果它只是没有一个人,但其他人(包括Buildbots)都没有抱怨。要解决此问题,请尝试以下步骤:
关闭Visual Studio。
同步到树的顶端,并确保没有冲突(“ svn status的 “不应该出现任何” ç,你已经改变了“在文件前面的S)。
如果有冲突,解决这些问题后,再次同步。
手动清除输出目录(铬\调试和镀铬\释放。使用命令行,你可以使用“ 删除/ S / Q调试版本 “从chrome目录做到这一点,或” 室射频调试版本 “,如果你有安装的类Unix的工具。
重新启动Visual Studio并打开铬的解决方案。
重建方案。
如果你得到这样的错误:* C:\ Program Files文件\微软的SDK \ WINDOWS \ V6.1 \ INCLUDE \ unknwn.idl(108):错误MIDL2025:语法错误:期待]或附近的“说文解字注” *浏览器\下载\ download_util.cc(469):错误C2065: ‘ITaskbarList3“:未声明的标识符你要么有错误的平台SDK或不正确,可能注册。尝试安装 Windows 7的SDK ,或者,如果已经安装,请尝试 手动注册的SDK。
如果你看到下面的错误:*错误C2039:’_Swap_adl’:不是’性病’的一个成员,那么你就很有可能运行到Windows SDK和一个安全补丁之间的冲突。看到这个 MSDN博客文章 了解更多详情 请尝试 重新安装Visual Studio的SP1。

如果你得到的错误是这样的:
3> C:\程序文件(x86)的\微软DirectX SDK(2010年6月)\包括\ d3d11shader.h(35):错误C2146:语法错误:缺少;标识符“D3D11_RESOURCE_RETURN_TYPE’前’

3> C:\程序文件(x86)的\微软DirectX SDK(2010年6月)\包括\ d3d11shader.h(35):error C4430:缺少类型说明符 – 假定为int。注意:C + +不支持默认int

3> C:\程序文件(x86)的\微软DirectX SDK(2010年6月)\包括\ d3d11shader.h(35):error C4430:缺少类型说明符 – 假定为int。注意:C + +不支持默认int

3> C:\程序文件(x86)的\微软DirectX SDK(2010年6月)\包括\ d3d11shader.h(37):错误C2146:语法错误:缺少;标识符“D3D11_CBUFFER_TYPE’前’

然后确保了DirectX头文件首先出现在包括搜索路径(MSVC |工具|选项|项目和解决方案| VC + +目录)。使得改变重试后生成不撞应该工作。

如果仍然无法正常工作,重复这个过程可能不会帮助。
Cygwin的访问控制问题

如果,同时建立 JavaScriptCore,你看到这样的错误:

3>在临时文件错误()使用的/ tmp / dftables-XXXXXXXX.in:父目录(/ tmp目录/)不可写
3> / cygdrive / C / B /从/ WEBKIT〜1/build/webkit/third_party/JavaScriptCore / PCRE / dftables线236
3>使:*** [chartables.c]错误255
……这是因为Cygwin安装包含在铬源时遇到问题映射NT ACL来POSIX权限。这似乎当铬签出到一个目录中的Cygwin的想不通的权限摆在首位,可能当目录从一个Cygwin环境运行之前创建的发生 mkpasswd。Cygwin的再强加自己的访问控制,这是不正确的限制。作为一种变通方法,请执行下列操作之一:

编辑上的NT权限 third_party \ cygwin的\ TMP 允许 修改 和 写入 的动作 大家都 和 机\用户。cygwin是一个能算出这个。或者,
找出什么地方出了错与你结账,然后再试一次-尝试做结账的 CMD ,而不是从一个Cygwin的壳,然后验证权限不完全空白在你的Cygwin安装。或者,
旁路Cygwin的访问控制(NT的将仍然有效)通过编辑的webkit \建立\ JavaScriptCore \ prebuild.bat和webkit的\编译\的WebCore \ prebuild.bat包括调用使用Cygwin的任何事情之前以下行:

设置CYGWIN = nontsec

注:不支持在Cygwin 1.7和更大的nontsec选项。
编辑cygwin的文件/ etc / fstab文件,添加noacl选项从

无/ cygdrive cygdrive二进制,POSIX = 0,用户,noacl 0 0

只有这些解之一应该是必要的。

本机客户端不运行

如果您构建chrome_nacl_win64时出现此错误:

LINK:致命错误LNK1104:无法打开文件’atlsd.lib“

这意味着你的页面的顶部描述没有安装64位编译器和工具。
第一gclient的运行失败安装python

如果gclient的第一次运行产生错误:

使用svn:无法移动“C:\用户\用户名\ depot_tools \ python_bin \ TCL \ Tix8.4.3 \ SVN \ TMP \条目”,以’C:\用户\ rhashimoto \ depot_tools \ python_bin \ TCL \ Tix8.4.3 \ SVN \项目“:该文件或目录损坏且无法读取

… 自动故障结帐蟒蛇。

请访问http://python.org下载最新的Python 2.x的客户端,然后继续。

您也可以在http://src.chromium.org/chrome/用“prebacked”版本躯干/工具/ third_party /

见这个链接就关闭Windows索引的说明。

手动注册平台SDK

GYP自动拾取正确的SDK版本按照“msbuild_toolset’变量设置在%USERPROFILE%\。石膏\ include.gypi。
如果该变量没有设置7.0A的SDK(也被称为“V100”)被使用。(即包含在Visual Studio中的一个)。
的Windows 7.1 SDK是通过设置变量“Windows7.1SDK”。

《 “在windows环境下编译chrome” 》 有 3 条评论

  1. countmeon 的头像

    原文地址:http://www.chromium.org/developers/how-tos/build-instructions-windows

  2. Louis Han 的头像

    感觉翻译得乱七八糟啊

    1. countmeon 的头像

      是的,最近用到这个,想编译下所以找找相关资料,我评论里面加了英文的链接。
      感觉你还是这么活跃,不过也没有以前那股劲了呢 呵呵

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注