程序编译
分类
静态编译
gcc -static 源文件名 -o 生成的可执行程序名
动态编译
gcc 源文件名 -o 生成的可执行程序名
静态编译和动态编译的区别
静态编译使用静态库,生成的可执行程序大,对库依赖小
动态编译使用动态库,生成的可执行程序小,对库依赖大
![](https://i-blog.csdnimg.cn/direct/b34e6feccb0a4e0a8ceded091654aa4e.png)
动态库
制作
gcc -shared
源文件名
-o lib
动态库名
.so
注意
如果制作动态时出现一下问题
,
需给制作动态库的命令加
-fPIC
![](https://i-blog.csdnimg.cn/direct/c1735ad2dee9407f85acb63a2828211a.png)
使用
情况1:
使用动态库的源文件与动态库在同一文件夹下
gcc 源文件名 lib动态库名.so -o 可执行文件名
注意
如果在执行可执行程序时出现以下问题需要加入
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
![](https://i-blog.csdnimg.cn/direct/01671954e92b410a84f3f56dad982136.png)
情况2:
使用动态库的源文件与动态库不在同一文件夹下
gcc 源文件名 -o 生成的可执行文件名 -L库文件路径 -l库名 -I头文件所在路径
注意
-L
是指定库文件的路径
-l
指定找哪个库,指定的只要库文件名
lib
后面
.so
前面的部分
-I
指定头文件的路径
如果出现一下问题
,
需要加入
export LD_LIBRARY_PATH=
库文件所在路径
:$LD_LIBRARY_PATH
![](https://i-blog.csdnimg.cn/direct/0fc06f7cee704932aef910dc0f2c3ee5.png)
情况3:
动态库文件在系统提供的文件夹
系统提供的文件夹
/usr/lib
系统提供存储动态库的文件夹
/usr/include
系统提供存储头文件的文件夹
gcc 源文件名 -l 库文件名 -o 生成的可执行文件夹
静态库
制作
1,
将要编译为库文件的源编译为二进制文件
gcc -c 源文件名 -o 二进制文件名.o
2,
将二进制文件转换为静态库文件
ar rc lib库文件名.a 二进制文件名.o
使用
情况1:
使用动态库的源文件与动态库在同一文件夹下
gcc -static 源文件名 lib动态库名.a -o 可执行文件名
情况2:
使用动态库的源文件与动态库不在同一文件夹下
gcc -static 源文件名 -o 生成的可执行文件名 -L库文件路径 -l库名 -I头文件所
在路径
情况3:
动态库文件在系统提供的文件夹
系统提供的文件夹
/usr/lib
系统提供存储动态库的文件夹
/usr/include
系统提供存储头文件的文件夹
gcc -static 源文件名 -l 库文件名 -o 生成的可执行文件夹