linux混混之牢骚:
万恶的金钱,有人为你卖儿卖女,有人为你去坐牢。在具有中国特色的社会主义制度下,剥削似乎并没有像《资本论》中所述那样消失,反倒日益的猖獗。富人,是我个人所能理解的,毕竟他们曾付出过。但富人中有一大批富不仁之人,开宝马撞人,砍手.....比比皆是。 是否真的要让富人消灭了穷人才能达到共同富裕的目标,才能使中国富强?这是个问题!linux结构复杂,但靠着大批量的程序员不断的奋战,也能将其捋顺,甚至完善。相比linux结构,国家结构复杂程度有过之而无后不及,难道却要靠靠那些大腹便便,红光满面,阿谀奉承,酒足饭饱,保养情人的官员来管理?会有效果吗?我们的未来……………………
GCC编译过程:
gcc编译程序时分为4个阶段:
1. 预处理(Pre-processing), 将文件包括的.h文件,宏定义等在文件中展开。
2. 编译(compiling),在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言。
3. 汇编(Assembling),汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码,.o文件
4. 链接阶段(Link),在成功编译之后,就进入了链接阶段,将各个文件互相连接,检查外部变量函数等,生成目标文件。
命令操作:
gcc -E hello.c -o hello.i hello.c文件经过 预编译 后生成hello.i文件。
gcc –S hello.i –o hello.s 或者
gcc –S hello.c –o hello.s hello.c文件经过 预编译+编译 后生成hello.s文件,即汇编代码。
gcc –c hello.s –o hello.o 或者
gcc –c hello.c –o hello.o hello.c文件经过 预编译+编译+汇编 后生成hello.o目标文件,即 机器代码。
gcc hello.o –o hello 或者
gcc hello.c –o hello hello.c文件经过 预编译+编译+汇编+连接 后生成hello执行文件。
GCC选项:(注意大小写)
-E-----同上
-S-----同上
-c------同上
-o------输出文件的文件名
-O-----优化代码
-O2----优化代码,比-O更加优化
-I -------#include<>这样的头文件,就在-I后面这个目录中找。#include" " 这样的头文件,先在当前目录下寻找,如找不到再到-I目录下寻找。
-L -------指定需要的库文件(.a .so)文件所在的目录
-static -----静态编译,不使用各种库。 编译出的文件 较大
-D ------------宏定义。 eg:gcc -DDEBUG 使用这样的命令,相当于在每个文件中都添加了 #define DEBUG 这个代码。
-g------------编译进去调试信息
objdump 和 readself
这两个都是gcc的工具,可以用于查看信息:
查看执行文件的汇编:
objdump -D -S hello
查看执行文件使用的库的情况:
readself -a hello 静态库
readself -d hello 动态库