解决Chromium编译出现无法找到DOM和CSS相关文件的问题

原创文章,转载请标明出处:Soul Apogee (http://bigasp.com),谢谢。

这两天重新下了个最新的Chrome的源代码,想编译一下,结果发现怎么都编译不过,在编译webcore的工程时,报了一大堆与如下类似的错误:

error C1083: Cannot open include file: 'EventInterfaces.h': No such file or directory
error C1083: Cannot open include file: 'CSSValueKeywords.h': No such file or directory

问题原因

找了很久终于找到了问题的原因:
EventInterface.h和CSSValueKeywords.h这些文件本身是不存在在代码中的,而是根据对应的idl文件的描述,系统在对应的平台下动态生成的。大家可以在src/third_party/WebKit/Source下搜索到这些idl文件。

而在windows下,由于没有自带的perl环境,所以chromium会在third_party下加入cygwin的目录,并利用cygwin来执行perl和相关的脚本。
由于chromium运行cygwin的方式是将其bin目录设置到PATH环境变量中,从而运行其脚本,所以其中一些目录环境就没有配置,比如/usr/lib文件夹是对应的windows的哪个文件夹。而chromium编译时依赖的perl就在这个文件夹内。

所以总的来说,就是在现在的代码在编译的时候无法找到当前需要的perl脚本,所以就无法正常编译。

解决方法

既然已经找到问题的原因了,那么问题也就很好解决了。
在src/third_party/cygwin目录下,有一个setup_mount.bat的文件,运行这个文件,他会将cygwin相关的目录配置全部导入注册表内。这样perl就可以被正常执行了,那些文件也就可以被生成出来了,这个问题就算是初步解决了。

当然这只是一个临时的解决方案,因为这个修改是无法提交回chromium的,在原来的chromium的代码中,是存在一个叫做cygwin的工程来帮我们在每次编译前都自动运行setup_mount.bat的脚本的,但是现在这个工程消失了。

所以最好的方法其实应该是修改其gyp文件,修复windows下的工程信息,然后提交回chromium,但是我暂时还没有太看懂gyp文件,不知道怎么完全还原cygwin工程的配置,所以这个想法就暂时这么搁浅了。

chromium的网站上也有一个关于这个问题的issue,不知道什么时候才能有结果。现在看来只能静待佳音了。

Posted in 03 Binary Life. Tags: . 2 条评论 »

充电什么的最不能停止了

在经过了一年的折腾之后,发现有太多东西是在是没有学好了,去年买了很多书,也都还没有看。今年是要好好充电了,很多事情都是心有余而力不足,人生没有目标什么的,迷茫什么的,实在太讨厌了。恩,列下比较重要又还没有好好看完的书单,争取在今年把他们都解决掉。

《Windows核心编程》
《Windows内核原理与实现》
《STL源码分析》
《软件调试》

恩,加油!

Posted in 01 My Soul Apogee. Tags: . 没有评论 »

Mac OS X Lion Spotlight 优化指南

原创文章,转载请注明:转载自Soul Apogee
本文链接地址:Mac OS X Lion Spotlight 优化指南

Spotlight是一个让人又爱又恨的东西,一方面他确实相当好用,但是另外一方面,他也确实占用了不少系统资源,在进行大量文件操作的时候,经常将CPU占满,可以将我可怜的macbook pro烧到80度左右,所以不能不好好的折腾他一下了,这里总结一些这两天摸索出来的Spotlight调优的方法,希望能对大家也有些帮助。

本人使用Mac现在总时间还不超过一周,所以很多东西理解的可能是不对的(什么可能啊,是应该吧),有不正确的地方,还请大家多多指正。

以下优化是在Mac OS X Lion 10.7.2 的系统上实践出来的,其他版本的系统可能有一些不一样,大家可以Google一下具体的方法,但是基本步骤应该是差不多的。
如果没有大量的文件操作,Spotlight对系统的影响还是不大的,占用CPU一般是3% – 5%左右,没有太大必要进行优化。但是如果发现最近电脑温度很高,或者电池消耗很快,就可以检查一下Spotlight,参照这篇文章进行优化了。

Spotlight简介

Spotlight是Mac系统中的查找服务,为了能使查找更加的迅速,Mac系统会在后台运行一个索引服务,在有文件操作或者资料更新,如iTunes,Mail等,就会为他们建立一个索引,用于加速Spotlight的查找。
所以,Spotlight其实分为两个部分:前台Spotlight的查找服务Search.bundle,和后台的索引服务mds。
优化Spotlight,其实就是优化这两个服务。

基本优化方案:减少需要索引的内容

根据上面的介绍,那么我们可以想到,最简单的优化就是减少需要索引的内容。

首先,在Spotlight的设置中选择我们需要索引的内容。
打开系统偏好设置->Spotlight,在搜索结果这个Tab栏内,我们把所有我们不关心的内容全部勾选掉。
我只勾选了:应用程序,系统偏好设置,通讯录和音乐。这些对我来说够用了。
spotlight_search_result:
spotlight_search_result

然后,将我们不需要索引的文件夹都加入Spotlight的黑名单。
在系统偏好设置->Spotlight中的隐私Tab中,我们可以选择那些目录是Spotlight不用去索引的,我们可以利用这个目录来大大减少我们需要索引的文件量。
打开Finder,点击菜单中的前往->前往文件夹,转到根目录/, 将文件夹中除了应用程序和用户的目录,全部放入黑名单。

需要注意的是:
其实用户目录也可以放入黑名单,Spotlight中显示的音乐,联系人和邮件,其实是靠和这些软件数据库直接联系来建立索引的,所以和文件夹的索引没有太大的联系,也可以放入黑名单。这里看大家的喜好,我全放进去了。

另外还需要注意的是:这里需要在Finder里面显示所有隐藏文件,因为一些和系统相关的目录,如/usr,其实都没有索引的必要,都可以放入黑名单。如果显示文件的方法不会的话,大家可以去Google一下。
spotlight_privacy:
spotlight_privacy

最后,我们还需要再设置一下Spotlight需要索引的硬盘,一些移动硬盘和U盘什么的,其实就不需要索引了。
打开终端,输入下面的命令:

# 关闭所有磁盘的索引服务
sudo mdutil -a -i off

# 只打开主硬盘的索引服务,我的主硬盘被挂载到/Volumes/Macintosh HD目录下(默认设置),大家可以根据具体情况修改。
sudo mdutil -i on "/Volumes/Macintosh HD"

如果上面的指令执行错误,可以使用如下命令来恢复对所有磁盘的索引。

sudo mdutil -a -i on

好,到此我们已经完成了第一步优化了。
此时大家可以看到Spotlight在重建索引了,在我的机器上,原来完全建立一次索引需要2小时,现在只需要几分钟了。

替换优化方案 I:替换Spotlight的前端部分

OK,在完成基本优化方案之后,既然我们已经将Spotlight阉割成了这般田地。那我们干脆换掉Spotlight使用其他的软件替代好了。
这里有一个不错的免费软件推荐:Alfred。大家也可以直接在App Store中搜索安装即可,过程就不赘述了。

隐藏任务栏中的Spotlight图标
这个方案问题的关键在于:既然Spotlight都不需要了,我们也就不需要显示它了。
关闭它的方法很简单,在终端里面输入如下指令即可:

sudo mv /System/Library/CoreServices/Search.bundle /System/Library/CoreServices/Search2.bundle
ps aux | grep SystemUIServer | grep -v grep | awk '{print $2}' | xargs kill

现在我们就会发现桌面上的Spotlight图标不见了,这一步优化也就宣告完成了。

当然想要恢复也很简单,输入如下命令即可恢复:

sudo mv /System/Library/CoreServices/Search2.bundle /System/Library/CoreServices/Search.bundle
ps aux | grep SystemUIServer | grep -v grep | awk '{print $2}' | xargs kill

替换优化方案 II:替换整个Spotlight

完全停止Spotlight的意思是不仅仅关闭掉Spotlight的桌面搜索,还停止掉Spotlight的后台索引服务。
所以友情提醒:前方有怪兽!将Spotlight关闭之后,依赖于Spotlight的索引服务的软件将无法正常运行,如Alfred将无法显示搜索结果(依赖于Spotlight索引服务mds),请小心处理,如果引起诡异的问题,与笔者无关。

这个方案是我暂时最喜欢的,因为在系统中Spotlight的索引服务还是随时在运行的,所以它依然会占用我们的系统资源,而我们又无法控制,完全替换他,才是我们最好的选择。
好,让我们开始吧。

完全停止Spotlight后台索引
在完成替换优化方案I之后,我们可以输入如下命令来完全停止Spotlight的索引。

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

在输入完这条指令之后,大家可以查看一下当前系统内是否还存在mds和mdsworker的进程。他们应该都退出了。
至此,Spotlight算是基本被我们给干掉了。

当然,如果我们后悔了,我们也可以通过如下命令来恢复。

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

恢复完成之后,不要忘了检查基本优化方案里面的内容哦,因为停止后台索引服务后,索引工作也停止了。

安装替代软件
那在没有后台索引服务的情况下,我们还能不能享受到和Spotlight这种类似的功能呢?
这里再推荐一个小软件:QuickSilver
这款软件里面会建立自己的索引,虽然就功能而言,不及Alfred强大,但也已经相差无几,对于图片,视频的索引是否有必要,个人还是持保留态度的,原因相信大家都懂的,所以基本上对我来说已经够用了。
在这个软件里面,我们可以自己设定软件的索引范围,或者禁止它自动更新索引,这样,就可以让我们最大程度上的控制这个后台服务了。

总结

到此为止,整个Spotlight的优化算是完成了,我可怜的mbp温度终于降低一些了,而且也不会因为大量文件操作导致温度飙升了。总的来说,折腾还是有些效果的,希望能对大家也有些帮助吧。