般若菠萝蜜多心经解

注:

般若波罗蜜多心经,简称心经,是在中国流行最广泛的佛经.据说这是观音菩萨和舍利佛的一段对 话.在佛学界,对心经的评价是很高的.认为心经是佛经的总括,读懂了心经,读佛经就入门了.佛教界认为,心经是有法力的,可以消除业障,启迪智慧,给每个 持有心经的人带来莫大的好处.今天,我把这篇心经和心经解献给大家,希望每一个看到的人将他下载下来,好好地保存在自己地硬盘里,那样你会得到意想不到的 好处. 般若菠萝蜜多心经原文:
观自在菩萨,行深班若菠萝蜜多时,照见五蕴皆空,度一切苦厄。舍利子,色不 异空,空不异色,色既是空,空既是色。受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故空中无色,无受想行识,无眼耳鼻舌身 意,无色声香味触法,无眼界,乃至无意识界。无无明,亦无无明尽,乃至无老死,亦无老死尽,无苦集灭道,无智亦无得,已无所得故,菩提萨陲。以般若菠萝蜜 多故,心无碍疑,无碍疑故,无有恐怖,远离颠倒梦想,究竟涅盘。三世诸佛,以般若菠萝蜜多故,得阿褥多罗三貌三菩缇。故知般若菠萝蜜多咒,是大神咒,是大 明咒,是无上咒,是无等等咒,能除一切苦,真实不虚。故说般若菠萝蜜多咒,既说咒曰:结谛结谛,菠萝结谛,菠萝僧结谛,婆啼萨婆荷.

 

般若菠萝蜜多心经解:
看观世音菩萨,以甚深的智慧之光,照见受,想,行,识,意这五蕴都是一些虚渺的幻象, 到达了那不生不灭的彼岸,脱离了一切苦难。舍利子啊,(你可知道,)精神和物质并没有不一样的地方,因为所谓精神,所谓物质的本质都是一样的。我们的感 觉,思想,行为,认识,也不能分成精神,物质什么的。舍利子啊,(你可知道,)什么精神啊,物质啊,受,想,行,识啊,这所有的一切,其本质都是不生不 灭,不垢不净,不增不减的。(这是什么意思呢?你可知道,我们世界的本质,乃至生命的本质,是永恒的,是无限的,没有起点,也没有终点。没有形,也没有 相,更不存在什么空间。所以你也不能让其多点什么,少点什么,不能让其变大,也不能让其缩小。)所以这世界的本质,乃至生命的本质,是精神的,既不存在一 个个实实在在的个体,更没有什么感觉啊,思想啊,行为啊,看法认识啊等等。我们眼睛看到的形象,鼻子嗅到的气味,舌头尝到的味道,身体接触到的触觉,以及 由此而产生的一系列什么东西是好的,什么是坏的等等等的概念,都是一些虚假的幻像,必须坚决加以屏弃。到那时,你就不会在我和非我之间感觉到一个界限,你 也不会意识到我和非我之间有一个界限.到那时,你那一切愚昧的都没有了,你那一切不愚昧的也没有了.你将跳出生死轮回,不存在生与死的概念. .什么苦,集,灭,道阿,智慧阿,佛法阿,只是过去的一个过程.你不会认为自己已得到了至高无上的佛法.(因为这世界上并不存在着什么至高无上的佛法,你 只不过是遵循佛的教诲,通过修炼,回到了自己本来的面目而已).菩萨就是这样通过到达不生不灭彼岸的智慧,排除了心中的一切疑虑,(对于肉体生命的消 亡),不会再有恐怖,离开这个本末倒置的梦幻世界,最后达到寂灭的境界.过去,现在,未来三世的诸佛,不就是依靠这到达彼岸的智慧,最后证得无上正等正觉 吗?所以这个关于到达彼岸的智慧的咒语,是具有无上神力的咒语,是扫除黑暗和愚昧的咒语,是世界上最高等的咒语,能给我们意想不到的结果.(这咒语)能除 去一切苦难,不存在任何虚妄.所以,我们这个到达彼岸的智慧的咒语是这么说的:结谛结谛,菠萝结谛,菠萝僧结谛,婆谛萨婆苛.

Ubuntu 8.10 Desktop版本 硬盘安装手记

[文章作者:陈臻 本文版本:v1.0 最后修改:2009.1.5 转载请注明原文链接:http://www.54chen.com/c/372]

折腾到半夜,特做记录。

1.ubuntu8.10 liveCD系统镜像文件下载:

ubuntu-8.10-desktop-i386.iso

http://ubuntu.interhost.co.il/intrepid/ubuntu-8.10-desktop-i386.iso(某一个镜像的地址)

2.winGrub文件下载:

WINGRB0206.EXE

http://fedora.linuxsir.org/main/files/WINGRB0206.EXE

3.安装WINGRB0206.EXE:

双击,没啥说的。

4.运行winGrub:

第一次打开会有个BaseSetup,把勾都选上,选OK就行。

主界面中:

Profiles选default。

Tools->Install Grub->Boot From 选Boot.ini,System Drive选C,Title随便写,TimeOut写30,->install

完毕!

5.修改menu.lst:

从ubuntu-8.10-desktop-i386.iso的casper里解压出来vmlinuz和initrd.gz到C盘根目录,ubuntu-8.10-desktop-i386.iso文件放在任何一个盘的根目录,它会自己去找到的。

在C:\GRUB\menu.lst里增加如下:

title Install Ubuntu
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-8.10-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.gz

保存,重启。

6.选择从install Ubuntu进去:

一直进啊进,到了liveCD的桌面。双击安装。

问题来了,整个硬盘没有显示!使用ubuntu下的系统管理器可以看到系统加载了一个/isodevice的设备,这个就是加载的在F盘下的ubuntu镜像。我们要使用ubuntu下的终端输入sudo umount -l /isodevice来卸载掉它。-l这个参数必须加,否则不能卸载。然后在安装进程中点击后退,鼠标变成一个转动的圆圈,等两三分钟(视系统配置)就可以加载硬盘了。

7.安装完成重新启动

8.进入系统:

这时会发现一半中文一半英文,听说是LiveCD版本的原因,中文支持不完整。

这时先搜索最快的软件源服务器,然后在终端里输入

sudo apt-get update 更新了列表后执行下列命令

sudo apt-get install language-support-zh

ThinkPad 系列,调整屏幕亮度,请使用“首选项”-“电源管理”.亮度选择那个条是反的。试了就知道了。

完毕。

Java EE中各种打包文件

1.EJB-JAR包:后缀为.jar

EJB模块,包含有Session Bean,Message Driver Bean,Entity Bean;管理这些Bean业务的为EntityManager,而EntityManager由EntityManagerFactory产生。通过配置persistence.xml配置这些Bean。

2.WAR包:后缀为.war

web模块,包括开发java web的所有文件如:JSP,Servlet,JSF,javascrpit,web.xml,图片,音乐,flash资源等等;如果需要在war中应用EntityBean,可以配置一下persistence.xml然后将EntityBean打包进war包中。。war描述文件web.xml放在WEB-INF文件下。

3.EAR包:后缀为.ear

实际上就是j2ee应用中的各种文档或模块,包括:EJB模块,WEB模块,RAR模块,CAR模块等。可以说它是开发项目的最终包,其他开发过程的模块最终会以.ear的包形式来实施应用。ear包中一个非常重要的描述文件为application.xml,它放在META-INF文件下。

4.CAR包:后缀为.jar

应用客户端模块,包含在客户端独立运行的类和访问的JDBC,JMS,JAXP,JAAS,以及 EJB客户端需要的类等。

5.RAR包:后缀为.rar

这个包应该比较好理解,它是资源适配器模块,包括java连接器,帮助库函数,以及其他一些相关资源。

windowsXP安装jdk1.5 Jboss4 Antx Tips

1.jdk 1.5(也就是5)

文件名:java_ee_sdk-5_01-windows.exe

下载地址:http://cds-esd.sun.com/ESD28/JSCDL/java_ee_sdk/5.0_01-fcs/java_ee_sdk-5_01-windows.exe?AuthParam=1230186860_df7d73a40e743135e1323ad74ae1cd16&TicketId=B%2Fw5lx%2BGTl1OShVEMlBdkgPg&GroupName=CDS&FilePath=/ESD28/JSCDL/java_ee_sdk/5.0_01-fcs/java_ee_sdk-5_01-windows.exe&File=java_ee_sdk-5_01-windows.exe

双击安装至:C:\Sun\SDK

环境变量设置:

JAVA_HOME:C:\Sun\SDK\jdk

classpath:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

PATH:%JAVA_HOME%\bin;

 

2.jboss 4.02

文件名:jboss-4.0.2.zip

下载地址:http://nchc.dl.sourceforge.net/sourceforge/jboss/jboss-4.0.2.zip

双击解压缩到:D:\jboss\

环境变量:

JBOSS_PATH:D:\jboss\jboss-4.0.2

 

3.antx

svn co .... antx

目录:D:\antx

运行:build.bat

环境变量:

ANTX_HOME:D:\antx\dist\antx

PATH:D:\antx\dist\antx\bin

 

4.hesper

代码: svn co hesper

配置antx构建工程:C:\Documents and Settings\dongfangbai\antx.properties

antx.properties释义:

antx.repository.project  = d:/antx/repository.project(二方库的位置,修改成你自己的)

hesper.output  = D:/work/logs/hesper(hesper的日志指定目录,修改成你自己的)

hesper.vmcommon.path  = D:/work/vmcommon(公共模板文件目录,修改成你自己的) 进入代码文件夹构建工程:antx reactor goals=default,eclipse

导入eclipse:导入现有的工程->指向hesper主目录

 

5.ear发布至jboss

修改jboss配置(修改默认的发布目录为自己的开发目录,这样不用来回复制了):

D:\jboss\jboss-4.0.2\server\default\conf\jboss-service.xml

 <attribute name="URLs">

         deploy/,file:/D:\dev\hesper\deploy\target(你自己的目录)

 </attribute>

  修改jboss配置(修改默认端口为80):

D:\jboss\jboss-4.0.2\server\default\deploy\jbossweb-tomcat55.sar\server.xml

 

 <Connector port="80" address="${jboss.bind.address}"

         maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"

         emptySessionPath="true"

         enableLookups="false" redirectPort="8443" acceptCount="100"

         connectionTimeout="20000" disableUploadTimeout="true"/>  

 

修改jboss配置(加虚拟目录,这个是意思意思...说不好哪天会使用...):

D:\jboss\jboss-4.0.2\server\default\deploy\jbossweb-tomcat55.sar\server.xml

找到<Host name="localhost"

            autoDeploy="false" deployOnStartup="false" deployXML="false"> 下一行添加:

<Context   path="/h"   docBase="D:\dev\"   debug="0"   reloadable="false"/>

MySQL的性能调优工具:比mysqlreport更方便的tuning-primer.sh

Sundry MySQL提供的脚本相比mysqlreport更进一步:除了报表还进一步提供了修改建议。安装和使用非常简单:

wget http://www.day32.com/MySQL/tuning-primer.sh chmod +x tuning-primer.sh
./tuning-primer.sh
和mysqlreport一样,tuning-primer.sh也支持.my.cnf
[client]
user = USERNAME
password = PASSWORD
socket = /tmp/mysql.sock

 

样例输出:在终端上按照问题重要程度分别用黄色/红色字符标记问题

-- MYSQL PERFORMANCE TUNING PRIMER --
- By: Matthew Montgomery -

 

MySQL Version 5.0.45 i686

Uptime = 19 days 8 hrs 32 min 54 sec
Avg. qps = 0
Total Questions = 264260
Threads Connected = 1

Server has been running for over 48hrs.
It should be safe to follow these recommendations

To find out more information on how each of these
runtime variables effects performance visit:
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
Visit http://www.mysql.com/products/enterprise/advisors.html
for info about MySQL's Enterprise Monitoring and Advisory Service

SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 10 sec.
You have 0 out of 264274 that take longer than 10 sec. to complete
Your long_query_time may be too high, I typically set this under 5 sec.

BINARY UPDATE LOG
The binary update log is NOT enabled.
You will not be able to do point in time recovery
See http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html

WORKER THREADS
Current thread_cache_size = 0
Current threads_cached = 0
Current threads_per_sec = 1
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 100
Current threads_connected = 1
Historic max_used_connections = 33
The number of used connections is 33% of the configured maximum.
Your max_connections variable seems to be fine.

MEMORY USAGE
Max Memory Ever Allocated : 96 M
Configured Max Per-thread Buffers : 268 M
Configured Max Global Buffers : 7 M
Configured Max Memory Limit : 276 M
Physical Memory : 1.97 G
Max memory limit seem to be within acceptable norms

KEY BUFFER
Current MyISAM index space = 8 M
Current key_buffer_size = 7 M
Key cache miss rate is 1 : 1817
Key buffer fill ratio = 6.00 %
Your key_buffer_size seems to be too high.
Perhaps you can use these resources elsewhere

QUERY CACHE
Query cache is supported but not enabled
Perhaps you should set the query_cache_size

SORT OPERATIONS
Current sort_buffer_size = 2 M
Current read_rnd_buffer_size = 256 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 132.00 K
You have had 0 queries where a join could not use an index properly
Your joins seem to be using indexes properly

OPEN FILES LIMIT
Current open_files_limit = 1024 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine

TABLE CACHE
Current table_cache value = 64 tables
You have a total of 125 tables
You have 64 open tables.
Current table_cache hit rate is 9%, while 100% of your table cache is in use You should probably increase your table_cache TEMP TABLES
Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Of 564 temp tables, 6% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Created disk tmp tables ratio seems fine

TABLE SCANS
Current read_buffer_size = 128 K
Current table scan ratio = 1 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 0 : 264392
Your table locking seems to be fine

 

更有用是作者总结的处理MySQL性能问题处理的优先级:尤其是头3条,基本上可以解决大部分瓶颈问题的原因。
# Slow Query Log 慢查询 尤其是like操作,性能杀手,轻易不要使用,让全文索引交给Lucene或者利用Tag机制减少like操作;
# Max Connections 并发连接数:一个MySQL deamon缺省最大连接数是100,调到更高只是为了出现问题是给我们更多的缓冲时间而不是任其一直处于那么高的状态,并发连接数类似于等候大厅:当等候人数过多的时候,一味扩大等候厅不是根本解决问题的办法,提高业务的处理速度,多开几个窗口才是更好的解决方法;我的经验就是超过100: 数据就要想办法(镜像或者分片)分布到更多Deamon上
# Worker Threads: Jeremy Zawondy 曾在部落格上說到:Thread caching 並不是我們最需要關心的問題,但當你解決了所有其他更嚴重的問題之後,它就會是最嚴重的問題。(thread caching really wasn't the worst of our problems. But it became the worst after we had fixed all the bigger ones.)
# Key Buffer  # Query Cache  # Sort Buffer  # Joins  # Temp Tables 临时表
# Table (Open & Definition) Cache 表缓存;
# Table Locking 表锁定
# Table Scans (read_buffer)  # Innodb Status

其他一些工具:  1 mytop: 一个top like的show processlist;
2 使用cacti做MySQL的监控:推荐配置模板
3 把binlog导出成文本和slowquery的格式几乎是一样的,调用mysqlslowquery脚本分析,有时候也会有意外收获;

谢谢 oldplantegg 补充: mysqlsla(hackmysql.com推出的一款日志分析工具该网站还维护了,mysqlreport, mysqlidxchk 等比较实用的mysql工具)能够分析slow query 和binlog等,这样就不用将binlog导出来了.

from:http://www.chedong.com/blog/archives/001451.html

普及帖:Linux 下编译C程序

GNU 编译器集(其前身为GNU C 编译器)诞生于1987年。当时Richard Stallman(GNU 项目的创办人)想要创建一个编译器,它可以满足他定义的“自由软件”概念,并可用来编译 GNU 项目发布的其他软件。GNU C 编译器迅速在自由软件社区中流行开来,而且以其健壮性和可移植性而闻名。它已成为许多集成开发工具的基础,被世界各地的发行商应用在 Linux 和其他操作系统之上。

 

GCC 已不再是主要针对GNU项目自身的软件的小型 C 语言编译器了。如今,它已支持了许多不同的语言,包括 C、C++、Ada、Fortran、Objective C,甚至还有Java。事实上,现代 Linux 系统除了可以自豪地炫耀那些由 GNU 工具直接支持的语言以外,它还支持大量其他语言。日益流行的脚本语言 Perl、Python 和 Ruby,以及正在不断发展的mono 可移植C#实现的确有助于冲淡人们对 Linux 编程的传统看法,但这完全是另外一个问题了。

Linux 内核和许多其他自由软件以及开放源码应用程序都是用 C 语言编写并使用 GCC 编译的。

1. 编译单个源文件

为了进行测试,你可以创建“Hello World”程序:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{ printf(”Hello world!\n”);
exit(0);
} 使用如下命令编译并测试这个代码: # gcc -o hello hello.c
# ./hello
Hello wordl!

在默认情况下产生的可执行程序名为a.out,但你通常可以通过 gcc 的“-o”选项来指定自己的可执行程序名称。

2. 编译多个源文件

源文件message.c包含一个简单的消息打印函数:

#include <stdio.h>

void goodbye_world(void)
{ printf(”Goodbye, world!\n”);
} 使用gcc的“-c”标记来编译支持库代码: # gcc -c message.c

这一过程的输出结果是一个名为message.o的文件,它包含适合连接到一个较大程序的已编译目标代码。

创建一个简单的示例程序,它包含一个调用goodbye_world的main函数

#include <stdlib.h>

void goodbye_world(void):

int main(int argc, char **argv)
{ goodbye_world();
exit(0);
} 使用GCC编译这个程序: # gcc -c main.c

现在有了两个目标文件: message.o 和 main.o 。它们包含能够被 Linux 执行的目标代码。要从这个目标代码创建Linux可执行程序,需要再一次调用 GCC 来执行连接阶段的工作:
# gcc -o goodbye message.o main.o

运行编译结果: # ./goodbye
Goodbye, world!

前面这些单独的步骤也可以简化为一个命令,这是因为 GCC 对如何将多个源文件编译为一个可执行程序有内置的规则。 # gcc -o goodbye message.c main.c
# ./goodbye
Goodbye, world!

3. 使用外部函数库

GCC 常常与包含标准例程的外部软件库结合使用,几乎每一个 Linux 应用程序都依赖于由 GNU C 函数库 GLIBC。
应用外部函数库的例子:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAX_INPUT 25

int main(int agrc, char **argv)
{ char input[MAX_INPUT];
double angle;

printf(”Give me an angle (in radians) ==>”);
if(!fgets(input, MAX_INPUT, stdin)){
perror(”an error occurred.\n”);
} angle = strtod(input, NULL);

printf(”sin(%e) = %e\n”, angle, sin(angle));

return 0;
} 编译命令: # gcc -o trig -lm trig.c

GCC 的”-lm”选项,它告诉 GCC 查看系统提供的数学库(libm)。因为Linux和UNIX的系统函数库通常以”lib”为前缀,所以我们假设它存在。真正的函数库位置随系统的不同而不同,但它一般会位于目录/lib或/usr/lib中,在这些目录中还有数以百计的其他必需的系统函数库。

4. 共享函数库与静态函数库

Linux系统上的函数库分为两种不同的类型:共享的和静态的

静态函数库:每次当应用程序和静态连接的函数库一起编译时,任何引用的库函数中的代码都会被直接包含进最终的二进制程序。

共享函数库:包含每个库函数的单一全局版本,它在所有应用程序之间共享。这一过程背后所涉及的机制相当复杂,但主要依靠的是现代计算机的虚拟内存能力,它允许包含库函数的物理内存安全地在多个独立用户程序之间共享。

使用共享函数库不仅减少了文件的容量和 Linux 应用程序在内存中覆盖的区域,而且它还提高了系统的安全性。一个被许多不同程序同时调用的共享函数库很可能会驻留在内存中,以在需要使用它时被立即使用,而不是位于磁盘的交换分区中。这有助于进一步减少一些大型 Linux 应用程序的装载时间。

将上面的 message.c 作为共享库函数使用的例子:

# gcc -fPIC -c message.c “PIC”命令行标记告诉 GCC 产生的代码不要包含对函数和变量具体内存位置的引用,这是因为现在还无法知道使用该消息代码的应用程序会将它连接到哪一段内存地址空间。这样编译输出的文件 message.o 可以被用于建立共享函数库,我们只需使用gcc的“-shared”标记即可: # gcc -shared -o libmessage.so message.o

将上面的mian.c使用共享库函数ligmessage.so编译: # gcc -o goodbye -lmessage -L. message.o “-lmessage”标记来告诉 GCC 在连接阶段引用共享函数库 libmessage.so 。“-L.”标记告诉 GCC 函数库可能位于当前目录中,否则 GNU 的连接器会查找标准系统函数库目录,在本例的情况下,就找不到可用的函数库了。

此时运行编译好的goodbye会提示找不到共享函数库: #./goodbye
./goodbye: error while loading shared libraries: libmessage.so: cannot open shared object file: No such file or directory

可以使用命令 ldd 来发现一个特定应用程序需要使用的函数库。ldd搜索标准系统函数库路径并显示一个特定程序使用的函数库版本。

#ldd goodbye
linux-gate.so.1 =>  (0×00493000)
libmessage.so => not found
libc.so.6 => /lib/libc.so.6 (0×0097c000)
/lib/ld-linux.so.2 (0×0095a000)
库文件 libmessage.so 不能在任何一个标准搜索路径中找到,而且系统提供的配置文件 /etc/ld.so.conf 也没有包含一个额外的条目来指定包含该库文件的目录。

需要设置一个环境变量LD_LIBRARY_PATH来制定额外的共享函数库搜索路径, # export LD_LIBRARY_PATH=`pwd`
# ldd goodbye
linux-gate.so.1 =>  (0x002ce000)
libmessage.so => /tmp/cpro/libmessage.so (0x00b0f000)
libc.so.6 => /lib/libc.so.6 (0x0097c000)
/lib/ld-linux.so.2 (0x0095a000)
运行程序 # ./goodbye
Goodbye, world!

gcc在命令行上经常使用的几个选项是:
-c   只预处理、编译和汇编源程序,不进行连接。编译器对每一个源程序产生一个目标文件。
-o file  确定输出文件为file。如果没有用-o选项,缺省的可执行文件的输出是 a.out,目标文件和汇编文件的输出对source.suffix分别是source.o和source.s,预处理的C源程序的输出是标准输出stdout。
-Dmacro或-Dmacro=defn   其作用类似于源程序里的#define。例如:% gcc -c -DHAVE_GDBM -DHELP_FILE=\”help\” cdict.c其中第一个- D选项定义宏HAVE_GDBM,在程序里可以用#ifdef去检查它是否被设置。第二个-D选项将宏HELP_FILE定义为字符串“help”(由于反斜线的作用,引号实际上已成为该宏定义的一部分),这对于控制程序打开哪个文件是很有用的。
-Umacro   某些宏是被编译程序自动定义的。这些宏通常可以指定在其中进行编译的计算机系统类型的符号,用户可以在编译某程序时加上 -v选项以查看gcc缺省定义了哪些宏。如果用户想取消其中某个宏定义,用-Umacro选项,这相当于把#undef macro放在要编译的源文件的开头。
-Idir   将dir目录加到搜寻头文件的目录列表中去,并优先于在gcc缺省的搜索目录。在有多个-I选项的情况下,按命令行上-I选项的前后顺序搜索。dir可使用相对路径,如-I../inc等。
-O   对程序编译进行优化,编译程序试图减少被编译程序的长度和执行时间,但其编译速度比不做优化慢,而且要求较多的内存。
-O2   允许比-O更好的优化,编译速度较慢,但结果程序的执行速度较快。
-g   产生一张用于调试和排错的扩展符号表。-g选项使程序可以用GNU的调试程序GDB进行调试。优化和调试通常不兼容,同时使用-g和-O(-O2)选项经常会使程序产生奇怪的运行结果。所以不要同时使用-g和-O(-O2)选项。
-fpic或-fPIC   产生位置无关的目标代码,可用于构造共享函数库。
以上是gcc的编译选项。gcc的命令行上还可以使用连接选项。事实上,gcc将所有不能识别的选项传递给连接程序ld。连接程序ld将几个目标文件和库程序组合成一个可执行文件,它要解决对外部变量、外部过程、库程序等的引用。但我们永远不必要显式地调用ld。利用gcc命令去连接各个文件是很简单的,即使在命令行里没有列出库程序,gcc也能保证某些库程序以正确的次序出现。
gcc的常用连接选项有下列几个:
-Ldir   将dir目录加到搜寻-l选项指定的函数库文件的目录列表中去,并优先于gcc缺省的搜索目录。在有多个-L选项的情况下,按命令行上-L选项的前后顺序搜索。dir可使用相对路径。如-L../lib等。
-lname   在连接时使用函数库libname.a,连接程序在-Ldir选项指定的目录下和/lib,/usr/lib目录下寻找该库文件。在没有使用-static选项时,如果发现共享函数库libname.so,则使用libname.so进行动态连接。
-static   禁止与共享函数库连接。
-shared   尽量与共享函数库连接。
这是Linux上连接程序的缺省选项。下面是一个使用gcc进行连接的例子: % gcc -o prog main.o subr.o -L../lib -lany -lm

From:http://www.ownlinux.cn/2008/11/14/linux-gcc-c/

坐阵杭州淘宝

照片欠奉。

涉及到技术转型,看到一句话,共勉。

如果程序语言是宗教,那么: C语言是犹太教,Java是基督教,c++是回教. C#是摩門教,LISP是禪宗佛教,PHP是Cafeteria基督教,Haskell是道教,Erlang是印度教,Perl是伏都教,Lua是巫术,Ruby是新异教主义,Python是世俗人文主义,COBOL是古异教主义,APL是山达基教,Visual Basic是撒旦教。

孔乙己cnflex版

    鲁镇的flex技术群的格局,和别处没什么不同,都是在群资料里写一推废话,废话里透着淫荡,群里男人女人总是不成比例。搞技术的人,上午下午进了群,三三两两报了三围,改个群里的名就安了身,盯着大家讨论的内容看。要提问题时,沉思熟虑,写上一堆,ctrl+enter发送—— 这是十多年前的事,现在群里出了个54chen,可以自己去54chen上找答案;倘若问题很难,没能找到人回答,便可以进入54chen了,有专用的网址,有淫荡消息优先享有。但大多数群众,多是小兵,大抵没有这样阔绰。只有少数人,才能坐在电脑前,登录54chen.com,慢慢地品位其中的内容。

    我从开始混flex技术起,便在cnflex里当一小管理员,大管理员说,样子太傻,怕侍候不了大户,就在群里给兄弟们做点事罢。下面的兄弟,虽然容易说话,但唠唠叨叨缠夹不清的也很不少。他们往往连if else都看不懂,到处打听消息,看着别人问,就跟着问,稍有点明白就到处吹嘘,每天群里乱哄哄的,像菜市场。在这种环境下,也没什么好干的,我便每天在里面晃悠。所以过了几天,大管理员又说我光挂名不干活。幸亏荐头的情面大,辞退不得,便改为专管吹水的一种无聊职务了。

    我从此便整天的挂在群里,专管我的职务。虽然没有什么失职,但总觉得有些单调,有些无聊。大管理员是一副凶脸孔,提问的也没有好声气,教人活泼不得;只有孔乙己到来,才可以笑几声,所以至今还记得。

    孔乙己是提高深问题的唯一的初学者。他昵称生猛;字体超大,字里行间时常夹些颓废,一堆乱七八糟的代码。用的虽然是宋体,可是又大又黑,似乎一年多没有用,也没有看。他对人说话,总是满口cpu内存的,教人半懂不懂的。因为他姓孔,别人便从描红纸上的“上大人孔乙己”这半懂不懂的话里,替他取下一个绰号,叫作孔乙己。孔乙己一到群,所有提问的人便都看着他笑,有的叫道,“孔乙己,你又“淫荡了”!”他不回答,对群里说,“内部代码,十行。”便开始提问。他们又故意的高声嚷道,“你一定又让老婆打了!”孔乙己睁大眼睛说,“你怎么这样凭空污人清白……”“什么清白?我前天亲眼见你被老婆追着打。 ”孔乙己便涨红了脸,额上的青筋条条绽出,争辩道,“不会技术不能算输……不会技术……搞IT的人,能算输么?”接连便是雄壮的话,什么“内存清理”,什么“优化”之类,引得众人都哄笑起来:群内外充满了快活的空气。

    听人家背地里谈论,孔乙己原来也搞过技术,还进过高级技术群,但因为提问太难,遇上大家不会,没有跑掉,反而被人家给踢了;不搞技术于是愈过愈穷,弄到将要讨饭了。幸而娘家人不错,替他还了债,又给他找了个工作,每月挣几百块,混口饭吃。可惜他又有一样坏脾气,因为搞过高级技术,便眼高手低,好吃懒做,大手大脚。做不到几天,便装个Flex Build,接着便悄悄溜号,跑来群里问。如是几次,便没人敢聘用他了。孔乙己没有法,便每天蹬个三轮车,收点破烂。但一到上班的点,便准时来到群里,提问题。

    孔乙己发了问题,涨红的脸色渐渐复了原,旁人便又问道,“孔乙己,你当真赚过钱吗?”孔乙己看着问他的人,显出不屑置辩的神气。他们便接着说道,“你怎的连件像样的衣服也买不起呢?”孔乙己立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话;这回可是全是cache、sql之类,一点不懂了。在这时候,众人也都哄笑起来:群内外充满了快活的空气。

    在这些时候,我可以附和着忽悠他上54chen,大管理员是决不责备的。而且大管理员见了孔乙己,也每每这样问他,引人发笑。孔乙己自己知道不能和他们谈天,便只好向孩子说话。有一回对我说道,“你会用flex么?”我略略点一点头。他说,“会用,……我便教你一教。在flex里,怎样调用JavaScript?”我想,收破烂的人,也配教我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,“不知道罢?……我教给你,记着!这些技巧应该记着。 ”我暗想我哪有那么多时间用JavaScript,而且我们也从不让兄弟们乱用;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不就是ExternalInterface么?”孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!……调用ExternalInterface有几种方法,你知道么?”我愈不耐烦了,努着嘴走远。孔乙己刚拿了张纸想给我讲,见我毫不热心,便又叹一口气,显出极惋惜的样子。

    孔乙己是这样的使人快活,可是没有他,别人也便这么过。

    有一天,大约是元旦前的两三天,大管理员正在准备下线,关了一个群,忽然说,“孔乙己长久没有来了!”我才也觉得他的确长久没有来了。一个员工说道,“他怎么会来?……他住院了。”大管理员说,“哦!”“他总仍旧是倒霉。这次金融危机这么深,他穷的更惨。”“后来怎么样?”“怎么样?先是提问题,后来又没工作,后来又提问题,提了问题又没人能回答”“后来呢?”“后来听说老婆带孩子跑了,他自己也气得跳楼了。”“跳楼了怎样呢?”“怎样?……谁晓得?许是死了。”大管理员也不再问,仍然慢慢的关他的群组。

    元旦之后,天气是一天比一天冷,看看将近年关;行情也不好,群里没几个人,我整天的靠着暖气,也须穿上棉袄了。一天的下半天,没有几个人,我正要合了眼坐着。忽然间看得一行文字,“提个问题。”这行字虽然极平常,却很眼熟。仔细一看昵称,那孔乙己便在群里呆着。他文字小而且苍白,已经不成样子;用了宋体,字里行间脏兮兮的,语气里还透着一股酸;见了我,发了个表情说道:“你好。”大管理员也来了,一面说,“孔乙己么?你还敢提问吗!”孔乙己很颓唐的大字答道,“这会儿不提问,什么时候提问。” 群里仍然同平常一样,笑着对他说,“孔乙己,你老婆都跑了,还问啊!”但他这回却不十分分辩,单说了一句“不要取笑!”“取笑?要是不提问,怎么会跳楼?”孔乙己低声说道,“跌断,跌,跌……”他的眼色,很像恳求大管理员,不要再提。此时已经聚集了几个人,便和大管理员都笑了。不一会,他填完单,买了票,便又在旁人的说笑声中,慢慢走去了。

    自此以后,又长久没有看见孔乙己。过了年关,大管理员说,“孔乙己怎么不来提问呢!”到了端午,又说“孔乙己好久不来提问呢!”到中秋可是没有说,再到年关也没有看见他。

    我到现在终于没有见——大约孔乙己的确死了。