1、静态库
动态库编译的时候,
并没有将文件编译到可执行文件中去,
而是建立一种链接关系,
这样做的好处是可执行文件很小
动态编译使用的是动态库文件进行编译
gcc hello.c -o hello
默认使用到的是动态库编译方法
1-1、制作静态库
gcc -c mylib.c -omylib.o
ar rc libtestlib.a mylib.o
注意:静态库起名的时候必须以lib开头
以 .a 结尾。
1-2、编译程序
方法1:
gcc -static mytest.c libtestlib.a -o mytest
方法2:
可以指定头文件和库文件的路径
比如libtestlib.a mylib.h 移动到/home/linux下
gcc -static mytest.c -o mytest -L/home/linux -ltestlib -I/home/linux
注意:-L是指定库文件路径
-l指定找那个库,指定的库文件名lib后面 .a 前面的部分
-I指定头文件路径
方法3:
可以将库文件及头文件放到指定的系统默认路径下
库的默认路径是 /lib 或者是/user/lib
头文件的默认路径是/usr/include
gcc -static mytest.c -o mytest -lteselib
2、动态库
静态编译
静态编译使用的静态库文件进行编译,
编译后将静态库编译进可执行文件。
2-1、制作
gcc -shared mylib.c -o libtestlib.so
2-2、运行
export LD_LIBRARY_PATH=./:LD_LIBRARY_PATH
只用执行一次。
方法1:
库文件、头文件均在当前目录下
gcc mytest.c libtestlib.so -o mytest
方法2:
库函数、头文件假设在/opt目录
gcc mytest.c -o mytest -L/home/linux -ltestlib -I/home/linux
通过编译。但是运行会出错,编译时找到了库函数,但是链接不到库,所以要执行链接库的操作,设置环境变量。
方法3:
库文件、头文件均在系统路径下
gcc mytest.c mytest -ltestlib