Creating library with GCC

七月 24, 2007 at 11:22 上午 | In Default, Technology, compiler | 1 Comment

A Short Definition

A static library is basically a collection of object files.During the linking phase of compilation,the static library,or the object files in it, will be simply copied into the target executable file.Static libraries usually ends with a “.a” suffix in UNIX variants(including MinGW) and “.lib” in Windows.

A shared library,also called dynamic library(on Windows,they are the familiar dlls,the origin of “DLL Hell”) is “dynamically” linked into program in runtime.Why I use “dynamically” here is that during compilation the object files contained in shared library are not inserted into the final executable file;instead, when the program is started, a program in the system (called a dynamic loader) checks out which shared libraries were linked with the program, loads them to memory, and attaches them to the copy of the program in memory.

Creating Static Library

Suppose you have some object files with the name util1.o,util2.o,….Then then following command will create a static library “libutil.a” and puts all the objs into it:

ar rcs libutil.a util1.o util2.o ...

Note that the static library must start with “lib” and have the suffix “.a

ar can be used to creating,modifying and checking static libraries.
Continue reading Creating library with GCC…

阅读(861 次)

归根结底,一场闹剧

七月 19, 2007 at 10:54 上午 | In Default | 2 Comments

大家一看着标题,就应该知道我说什么了,同时脸上会露出一种很神秘很暧昧的微笑。所有看中国足球的人,哪怕看一场,不管是头球队大胜马来,抑或打平就出线然后惨败乌兹别克,都能体会到真真切切的荒诞感。

中国有很多奇怪的事,按照一种不是逻辑的逻辑走,走得红旗飘飘,最后走向莫名其妙。朱广沪在赛前喊出刀架在脖子上,足协主席谢亚龙会在输球后跑进更衣室高唱抗日诗歌……凡此种种,无不光怪陆离,你还能说什么?只好虚无主义,说这些哥们早就习惯了,一场闹剧而已。换个主教练,正常一点的,世界杯预选赛失利;次一点或背一点或两者兼而有之的如朱广沪,亚洲杯小组不出线。再往上点,换个足协主席,口号照喊,官僚依旧,就这样一次次的轮回,从失败走向失败,从深渊走向深渊。李大眼说得好,连悲剧都不是,只是一场闹剧,一地鸡毛,一声叹息。

Continue reading 归根结底,一场闹剧…

阅读(1207 次)

Tip:Code Layout

七月 17, 2007 at 9:51 下午 | In Default, Technology | 1 Comment

用一个很原始的办法解决了代码显示的问题:把代码放在pre标签里头,就能正常显示空格了。这个技术在其他一些blog上也不很管用,比如blogger,似乎可视化的HTML编辑器会对输入内容动很多手脚,把空格什么的都删除了,解决办法是关掉可视化编辑器,直接写html。所幸在Scinese上pre标签还能正确显示,这样只要把代码在Vim里转成html再贴过来就行了。剩下的问题是字体大小,因为页面宽度比较小,一旦有较长的行就只能显示一部分,变成了残缺美。更可恨的是,代码在firefox下和IE下显示的字体大小居然大不相同!我不是很懂html和css,碰到这种情况只能哀叹一下并坚定以后找时间学css的决心,别无他法了。

贴一个煞笔然而无处不在的Hello World:

#include <stdio.h>

int main(int argc,char **argv) {
    printf(“hello,world!n);
    return 0;
}

按照corsair的意见,color这种史前文物不符合xhtml标准,应该毫不留情地抛弃……但是wordpress又不让inline css,两难之下,还是觉得高亮效果比符合xhtml标准更重要,继续使用color。

阅读(1114 次)

How GCC Divide

七月 17, 2007 at 1:57 上午 | In Default, Technology, compiler | 2 Comments

While I’m working on the module of my project which translating arithmetic operations into machine code,I think I should take a look at how gcc does it,especially (one of)the most wierd operation in i386 instruction set,div.After examining gcc’s output(using -S option when compiling),I find something interesting.When divisor is a constant integer,for example,an expression like x/3 (assuming x is a local variable with type int)in C source code,gcc will translate it into a seemingly strange sequence of instructions:

movl  $1431655766, %eax
imull x
movl  %edx, %ecx
movl  x, %eax
sarl  $31, %eax
subl  %eax, %ecx

(the result is stored in %ecx)

Continue reading How GCC Divide…

阅读(1053 次)

Age of Abundance

七月 12, 2007 at 2:30 上午 | In Default, Technology | 3 Comments

装逼文字一篇,厚颜地blog出来:

现在,每天相当于有1000G的数据被传输到互联网上。这相当于5万个视频短片,2.5亿个杂志故事,或者5亿个博客。重点不在于供给,而变成了选择的智慧。

是的,现在的问题是:太多了。信息不断的被制造出来,然后被遗忘在网络的某个不知名角落,呆在某块磁盘的一条不起眼的磁道上,直到某天一条delete命令扫过,重新归于零。五年前——甚至两年前——虽然网络已经是个庞然大物,但仍然可以掌握,除了几个大的门户网站和论坛,别的什么个人主页之类的,自生自灭,和传统媒体世界在结构上,或者说拓扑上没有太大的区别——我们可以说两者是同构的,同胚的(在这里我卖弄了两个数学词汇)。慢慢的情况有了变化,信息的积累到了一定程度,就需要有更高一层进行处理的工具出现:筛选,过滤,组织。这就是搜索引擎。在我的字典里Search Engine就等于Google,Baidu只是用来找找mp3。好了,就算这样,“太多了“问题仍然没有解决:Google原则上让我们能够找到网络上的一条狗,同时会找出无数条差不多的狗。虽然Google有伟大的PageRank算法,但仍然只是机器,还不能和人肉搜索相比。那么只好人多出一点力,先把信息组织一下。当然,这样的努力早就有了,比如Yahoo,比如新浪。

但是新时代的特征是“You”,是slashdot,digg,wiki,flickr,youtube,……,是blog,是长尾理论,是三个臭皮匠。让所有人都成为信息生产者(本来他们只是被动的消费),这就把原来星形的信息传播方式——从少数拥有者向多数消费者,变成了一个复杂的连通图。这个想法似曾相识,仿佛就是自由贸易和市场经济,看不见的手。我每天在网上的主要活动之一就是在reddit,slashdot(及它的中国后裔solidot),cnbeta上刷新,在Google Reader上看blog(rss真是伟大的发明)。这些聚合类站点的基础是民主,从某种意义上和人民代表大会一个性质。我认为本质上,它们就是事实上的人肉搜索引擎。当然民主有它的缺点,那就是多数人打压少数人,学究点叫多数人的暴政。必须承认,阳春白雪,曲高和寡是存在的;好东西往往不被大众所认知;大众肯定的不一定就好,等等很多”往往“,“不一定”,大量的例外。但是没有办法,完美是不存在的,我们需要的是一个可行解,并不一定最优。

我想这个变化可以称得上是革命性的。我们找到了一种办法,来解决“太多了”这个难题。这个办法并不陌生,几百年来已经成为人类社会的基础。我准备了几个神秘的说法,比如:在系统包含足够多的成员时,自组织就可以实现。相互作用导致了复杂结构。等等。总之,我们处在一个信息的暴涨时代,一个age of abundance,一个age of uncertainty。

p.s. 昨天把自己一些乱七八糟的想法写上来之后,看到一篇专业人士的文章,The Role of Humans in Google Search by Matt Cutts,比我从一个用户的角度泛泛而谈要深入的多。Google黑板报上有中文翻译

阅读(966 次)

华丽的插件

七月 10, 2007 at 7:11 上午 | In Default | 3 Comments

这两天去上海了,事情没办成,灰溜溜地回来。登上Scinese一看,一个震撼性的消息震撼了我:LaTeXRender!可以在post里写数学公式了!我认为,Scinese很有可能是第一家支持LaTeX的Blog服务(那些个人搭的Blog不算),或者再加一个范围上(中国)的限定。

再看了一下,发现不少新插件,CoolCode(好像早就有了,但是插件列表里没显示……)、Douban等等,兽血沸腾了。

CoolCode还是没达到我的期望,到底怎么样才能正确的在code里面显示缩进呢?郁闷

阅读(1299 次)

GFW

七月 2, 2007 at 7:58 下午 | In Default | No Comments

中国网,封天下

功夫网(GFW)

每次提到GFW都让人一肚子邪火,至今blogspot,wordpress和flickr都不能通过正常渠道访问。中国的网民在使用代理这一项上毫无疑问得处于世界领先水平——都是逼出来的。前不久GFW莫名其妙的把Google Page Creator干掉了,这两天又赦免了,不知道能保持多久。

很明显,GFW要封锁的目标都是那些能够让用户自由传播信息(文字、图片等等)的服务,而这种用户参与的模式正是所谓Web 2.0的特征,从Wiki到Blog到Flickr这样的图片社区,都为广大人民群众提供了一个难得的平台——自由、平等、公开的交流,共享。自由经济有多么大的能量我们就不说了,而思想、文化、知识的交流,其重要性必须上升到人类社会进步的高度去衡量。 这就是先进文化的发展方向,政府把三个代表挂在嘴边(估计也挂不了多久了,如今社会最红的词是河蟹),却不敢面对现实,实在是一种很不自信的表现。

说完GFW,再来骂通信服务的硬件设施。中国的宽带,就其提供的服务质量和其收费的对比而言,在世界上估计也是高处不胜寒。我曾经看过一张触目惊心的截图,是在米国上网下载东西,就用IE的弱智下载工具,速度也能飚到2M/s(这里有个单位的问题)。米国人民身在福中不知福,觉得网络速度还不行。这是因为有个更狠的作对比,那就是我们一衣带水的近邻,日本。前不久看到消息,称印度政府准备在N年内实现免费宽带,并且逐步把国有的电信产业放开。虽然现阶段我国的国情极其复杂,但迄今没有看到任何在这方面提高的努力,只有开倒车的努力。或许中国真是太复杂了。

阅读(763 次)

列宁同志的教诲

七月 1, 2007 at 12:29 上午 | In Default | No Comments
……让我像幼稚的孩子一样由衷地觉得自豪——怎么人类可以创造出这样奇迹似的乐曲。但是我不能常听这个乐曲,因为,它会影响我,使我有一种冲动,想去赞美那些活在污秽地狱里而仍旧能创造美的人,想去亲抚他们的头。可是这个时代,你不能去亲抚人家的头,除非你要让你的手给咬断。你得重击人家的头——毫不留情地重击——虽然说,理论上我们是反对任何形式的暴力的……我们的任务真的很难搞。

虽然一个星期前的某一天我从早上开始到睡觉前嘴里和脑子里都不停的翻滚着列宁同志的名字(和马克思一块,合称马列主义毛泽东思想邓小平理论),对这位伟大的革命导师,我对他的了解也就仅限于他是伟大的革命导师。当代的青年学生从识字起就接受政治教育,从小就在教学楼走廊里瞻仰列宁同志的画像,这么多年下来没有一点逆反心理是不可能的。我相信这个时代一般人不会再去念毛泽东选集列宁选集,就好像普通人不需要念自然哲学的数学原理;故事是有趣的,伟人在意识形态里需要靠一些细节,一些轶事来支撑其伟(别念,有歧义);他们的思想已经埋在历史的深处,慢慢变成化石被放在博物馆里。

大一时学过马哲,大二是毛概和马政经,这学期学了邓论。这些课如果没有老师点名的压力几乎没多少人愿意去上;老师也未必想照本宣科的念教材上那些散发着陈腐气息的所谓辨证思想。很佩服编写教材的人那造长句的能力,把唯物辩证法作为一种绕口令的功能发挥到了极致,不辞辛劳地制造出许多“A是B的前提,B是C的条件,C又是A的……“这样非人的句子(似乎是本朝太祖最早创造出这类以唯我独尊的语气和貌似合理的逻辑为特征的句子)。幸好政府终于意识到政治教育搞得太多了只有适得其反,所以现在的大一新生们可以少受一些折磨,总算是一个进步。总之,经过多年的意识形态教育,我们在潜移默化的接受这一套的同时慢慢走向了另一个极端,就是对正统的革命的意识形态的东西抱一种虚无主义的态度。很可笑的状况:意识形态和政治思想已经渗透到我们的骨子里,而我们表面上却要自觉不自觉地鄙视、厌恶它。这种态度多半并非出于理性的思考,只是一种情感上的选择,就好像东西吃多了反胃一样。

再回头看看列宁的这段话,肯定会觉得有些陌生。和我们多年宣传的革命导师的形象不太重合。从外貌上看,列宁同志是个儒雅的罗刹国知识分子,不像斯大林或者太祖那样有传说中的领袖气质。贝多芬的热情奏鸣曲,很遗憾我没听过;但列宁的话让我有去听一下这首曲子的冲动,看看好人列宁为什么没有选择贝多芬。我相信毛主席不会说这样的话,没有根据,只是直觉。因为这段话里有一种软弱的成分,很感人但现实不相信感动。

阅读(922 次)

Using Tabs in Vim

六月 29, 2007 at 7:25 下午 | In Default, vim | No Comments

Vim是我最喜欢用的编辑器。Vim v.s Emacs几乎是除开程序语言之争(比如C++ v.s Java)之外持续时间最长、参与人数最多也是最没意义的口水战。Emacs很好,几乎无限的扩展性,但我就不喜欢两点:第一,我不喜欢把指头拐出去按ctrl,alt,而且往往要同时;第二,Emacs慢,拖了那么多五花八门的extension,不慢才怪了。有人说Vim不也经常要伸出手指去够键盘左上角的Esc键?所以我前面说了这是最没意义的口水战;这一类关于个人喜好的争论都是如此,本来个人喜好就是没道理可讲的,偏要去跟人讨论讲出一堆因为所以然来,结果自然是口水飞溅了。

回到正题。Vim 7用了这么久,突然发现一直没有用上Vim 7的最大新特性(之一),就是标签页,tab。在这里把常用的几个命令总结一下:

首先,默认情况下Vim是不显示tab label的。想让Vim在头上显示一栏标签,就要在_vimrc加一句

set showtabline=2

0表示不显示。

打开新标签页

最常用的命令自然是在新标签页中打开文件了。直接:tabnew filename。注意这个命令是支持自动完成的。顺带提一下tabf,后面可以跟通配符进行搜索。

在标签页间切换

有人说直接用鼠标点就行了。我也觉得鼠标很方便,但掌握一些键盘操作命令也是有好处的(这又涉及到另一大著名口水战GUI v.s CLI)。可以用:tabn和:tabp在标签页间移动,或者在normal mode下按gt。此外,还有诸如:tabfirst和:tablast,顾名思义即可。

重新安排标签页

有时需要调整一下标签页的顺序。很遗憾Vim没有提供通过drag调整顺序的功能,只能借助于命令。:tabm n移动当前标签页。Vim将所有标签页从0开始编号,n就是标签页的新位置。

最后提一个十分有用的命令,即:tabdo command,可以一次性对所有标签页执行command命令。比如要对所有标签页进行替换,按照传统是把foo替换为bar,那么

:tabdo %s/foo/bar/g

这篇文章里提到的内容其实只是tab的很小一部分,欲知详情,请查阅vim的帮助。

阅读(900 次)

Restart my Compiler project

六月 26, 2007 at 9:16 下午 | In Default, Technology, compiler | No Comments

考完试了,有几天空闲时间。我想起还有个建设中的编译器被我遗忘在目录深处,决定利用这几天工夫好好来写点代码。

这个玩具编译器(我的计划是未来某一天它不再是一个toy language,我设想了许多美好的特性,但我现在还没有足够的技术和时间来实现他们)的前端已经完工。编译器前端——词法分析、语法分析——在教科书上占一半的篇幅,涉及到不少理论知识,但实际上是个无聊的工作。而code generation则是麻烦而繁琐的。网上可以找到全套的工具——从flex、bison这样的前端生成器,到MLRISC这样完备的后端,但我还是想自己动手写一遍。 我现在去看几个月以前写的code generation,惊奇于这样丑陋而复杂的代码居然(貌似)是对的。

我的目标是生成机器代码,这两天花了不少功夫研究IA32处理器的浮点运算,深刻地认识到FPU是一个多么难看的设计,让我的代码增加了无数的条件分支和switch。想了解一下MIPS在这个问题上是怎么处理的。string,class等已经初步提上日程。至于我幻想中的gc及lambda expression,high-order function,continuation等一干functional特性,现在还遥遥无期。

从书签里翻出一篇老文章,一直没细读,Modern x86 assembly (blogspot….被和谐掉了。同志们上代理。),里面着重谈了alignment(对齐)和caching(缓存)。对现代的计算机架构,这两样东西对性能有极其重要的影响。对齐主要是编译器考虑的问题;而cache的影响则更为微妙。准备好好学习一下。

阅读(778 次)

« 上一页下一页 »

Zero Sound , powered by 赛族 & WordPress MU | Theme: Pool by Borja Fernandez.
Entries and comments feeds.