1.gcc编译的四个阶段
2.gcc编译参数
gcc xxx.c -o xxx —— 将xxx文件直接生成可执行文件
注意:.c文件中包含的头文件若不是系统文件,而是自己写的,则应该放在.c文件同级目录下,否则:
gcc xxx.c -o xxx -I 指定头文件或目录 —— 指定头文件目录后再编辑文件
gcc xxx.c -o xxx -D 宏名字 —— 编译时定义宏
gcc xxx.c -o xxx -O1/2/3 —— 将程序优化后再编译文件
gcc xxx.c -o xxx -Wall —— 编译文件时提示警告信息;
gcc xxx.c -o xxx -g —— 在可执行文件里添加调试信息
3.静态库
静态库名字
lib + 库名 + .a 如libmytest.a
制作步骤
(1)生成对应的.o文件;
(2)将生成的.o文件打包( ar rcs + 静态库名字(libmytest.a) + 生成的所有的.o)
(3)发布和使用静态库
包括静态库和头文件
gcc xxx.c -c xxx.o -L 库文件或目录 —— 指定库目录或文件
gcc xxx.c -c xxx.o -l 库名字(去掉lib和.a) —— 指定库名字
静态库优点:
1.包含库的应用程序发布时,不需要提供对应库;
2.加载库的速度快;
静态库缺点:
1.库打包到应用程序中,导致程序体积大;
2.库发生改变时,需要重新编译程序。
4.动态库
lib + 库名 + .so 如libmytest.so
制作步骤:
1.生成与位置无关的代码(生成与位置无关的.o)
gcc -fPIC xxx.c -c xxx.o
2.将.o打包成共享库
gcc -shared -o 共享库名字.so 所有.o文件
3.使用动态库
1)跟静态库类似
2)gcc main.c libMytest.so -o main.o
注:若使用动态库,在执行程序报错:error loading shared libraries:libMycalc.so: cannot open shared object file : No such file or directory时,可以采取以下三种措施:
第一种(暂时性、测试使用):
export LD_LIBRARY_PATH= + 包含动态库的目录 —— 将目录加入lib目录
第二种(不常用):
(1) 在家目录中打开.bashrc文件,然后将以下命令写入文件中的最后一行
#export LD_LIBRARY_PATH= + 包含动态库的目录(绝对路径)
(2)重启终端
sudo ldconfig
第三种:
(1)需要找动态链接器的配置文件
vi /etc/ld.so.conf
(2)动态库的路径写道配置文件中
(3)更新
sudo ldconfig