目录
一、Linux GCC常用命令
1、简单编译
(1)准备工作
(2)一步到位编译指令
(3)实际阶段
2、多个 程序文件编译
gcc test1.c test2.c -o test
3、检错
gcc -pedantic illcode.c -o illcode
4、库文件链接
1.编译为可执行文件
gcc -c -I /usr/dev/mysql/include test.c -o test.o
2.链接
gcc -L /usr/dev/mysql/lib -lmysqlclient test.o -o test
3.强制链接时使用静态链接库
gcc -L /usr/dev/mysql/lib -static -lmysqlclient test.o -o test
静态库链接时搜索路径顺序:
1.ld会去找GCC命令中的参数-L
2.再找gcc 的环境变量LIBRARY_PATH
3.再找内定目录/lib/usr/lib/usr/local/lib 这是当初compile gcc时写在程序内的
动态链接时、执行时搜索路径顺序:
1.编译目标代码时指定的动态库搜索路径
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3.配置文件letc/ld.so.conf中指定的动态库搜索路径
4.默认的动态库搜索路径/lib
5.默认的动态库搜索路径/usrllib
二、GCC编译器背后的故事
1.准备工作
hello.c文件:
int main(void)
{
printf("Hello world!\n");
return 0;
}
2.编译过程
1、预处理
(1)将所有的#define 删除,并且展开所有的宏定义,并且处理所有的条件预编
译指令,比如#if #ifdef #elif #else #endif等。
(2)处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。
(3)删除所有注释“//”和“/**/”。
(4)添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
(5)保留所有的#pragma 编译器指令,后续编译过程需要使用它们。
使用gcc进行预处理的命令如下:
gcc -E hello.c -o hello.i
2、编译
将预处理生成的hello.i文件编译成汇编程序hello.s
GCC选项-S使GCC在执行完编译后停止,生成汇编程序
gcc -S hello.i -o hello.s
3、汇编
gcc -c hello.s -o hello.o
或者
as -c hello.s -o hello.o
4、链接
gcc hello.c -o hello
size hello//查看大小
ldd hello