一、gcc编译器
1.代码的预处理、编译、汇编、连接。
2.C程序员一般写程序会定义.c和.h两种文件。.c源文件,包含代码功能的实现。.h头文件中包含各种功能定义和声明。
3.gcc 一般用法
(1)gcc -E code.c 只做预处理,可以生成.i文件。
(2)gcc -c code.c 只编译,不连接,生成.o文件。
(3)gcc -S code.c 生成汇编文件(.s文件)。
(4)gcc code.c 预处理、编译、汇编、连接生成可执行文件 a.out。
(5)gcc -oXXX 指定目标文件名——XXX。
(6)gcc -E code.c -ocode.i 生成.i文件(不需要做预处理的源文件)。
(7)gcc -Wall 可以显示更多的警告信息。
二、预处理
1.C语言#include查找头文件的途径:
(1)""会查找当前目录,若查不到,会到库文件查找,而<>不查找当前目录,直接去找库文件。
(2)gcc -I(大写i) 指定的目录
(3)系统目录(/usr/include等)
(4)用环境变量(CPATH/C_INCLUDE_PATH)配置的目录
2.#pragma 可以额外新增一些功能
#pragma GCC dependency 文件名
比较更新时间,如果文件名比当前文件新,产生“警告”
#pragma poison 名字
这个名字将被禁用,如果代码中使用此名字,产生“错误”
#pragma pack(正整数)
可以设置结构体的对齐和补齐的单位。0,不做改变。1,则是1倍,2,两倍。自身长度的整数倍,超过4的以4计算。
三、静态库、动态库
程序员可以把自己的代码打包成库文件,再提供一个头文件即可。
库文件包括自己的代码静态库和共享库(动态库),静态库的使用方式是代码的复制,共享库的使用方式是函数指针(函数地址)。
静态库优点是代码独立、效率稍好,缺点是代码空间太大,不利于修改和维护。
共享库优点是代码空间较小,修改、维护比较方便,缺点是代码依赖共享库文件。
实际工作中,共享库的使用更加广泛。
共享库以.so结尾,静态库以.a结尾。
1.静态库的使用步骤
1.1生成静态库文件(.a)
(1)写源代码(.c);
(2)编译生成目标文件(.o);
(3)使用 ar -r 命令生成静态库文件
ar -r lib**.a code.o
1.2调用静态库文件(需要lib**.a和.h文件)
(1)写调用源代码(test.c);
(2)编译(gcc -c test.c);[可省略,在连接时用 gcc test.c]
(3)连接静态库文件,有三种方法:
A:gcc test.o lib**.a (直接连接)
B:配置环境变量 LIBRARY_PATH,把库文件所在路径配进去,然后用
gcc test.o -l** (**为lib后的库文件名字)
C:gcc test.o -l** -L库文件路径
[l指定库文件名,L指定库文件路径]
2.共享库的使用步骤
2.1 生成共享库(.so)
(1)写源代码(.c)
(2)编译生成目标文件(.o)
gcc -c -fpic code.c (-fpic可以不加)
(3)生成共享库文件(.so)
gcc -shared code.o -olib**.so
2.2 调用共享库
和静态库一样。
运行共享库程序,必须配置LD_LIBRARY_PATH。
[Tip]将"./a.out"-〉"a.out"
(1)vi .bashrc
(2)在最后一行添加如下字段:
export PATH=$PATH:.
(3)退出保存。
(4)source .bashrc 即可。
下次执行a.out时,直接"a.out"就可以啦
若修改失败,导致vi,ls等其他命令无法使用,可以“cd usr/bin/vi ~/.bashrc”修正修改。
[你将来的成就是由你现在的努力决定的]