转自:
http://www.cnblogs.com/napoleon_liu/archive/2011/05/06/2038698.html
gcc 编译 C源码 四个步骤:
1)预处理 Pre-processing 编译器对各种预处理命令进行处理:包含头文件的包含、宏定义的扩展、条件编译选项等。
指令主要有: #define, #include, #ifdef ... #endif
可以用gcc 的选项“-E” 进行查看。 gcc -E hello.c
2) 编译阶段 Compiling 编译器首先检查代码的规范性、是否有语法错误等,之后把代码翻译成汇编语言。
该阶段只进行编译而不进行汇编,生成汇编代码。 编译 -> 汇编代码
可以用“-S” 选项来进行查看。
3) 汇编阶段 Assembling 汇编阶段把编译阶段生成的“.s” 文件转成二进制目标代码。
选项 -c
4) 链接阶段 Link 将目标文件链接成可执行文件
这里涉及到一个重要概念:函数库
ldd命令查看动态库加载情况:
# ldd hello
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
l dd - print shared library dependencies
$ rpm -qf /usr/bin/ldd
glibc-common-2.3.4-2.25 看来一般只要有glibc就有ldd命令,就可用。