1.何为静态库……何为动态库……?
Windows下:.dll 是动态库 .lib是静态库
Linux下: .so是动态库 .a是静态库
静态库:
在生成可执行程序的时候,会把函数的具体执行方式封装到程序中,程序体积比较大,只要能编译成功,就可以在任意相同的平台上运行
动态库:
在生成可执行程序的时候,只会把函数的接口封装到程序中,体积较小,在程序开始运行时,才调用函数的具体执行方式
2.具体生成方式
静态库:
<1> 生成 .o文件
gcc -c fun.c (生成fun.o)
<2>生成静态库
ar crs -o libfun.a fun.o
<3>链接
gcc main.c -o main libfun.a
动态库:
<1>生成动态库 .o文件
gcc -fPIC -c fun.c (生成fun.o)
<2>生成动态库
gcc -fPIC -shared -o libfun.so fun.o
<3>链接
gcc main.c -o main -I xx1 -L xx2 -lfun
注:xx1:头文件位置 xx2:库文件位置,-l后面是库名
Linux系统默认链接的是动态库,当库名称一样时,需要用 -staic 指明静态库
链接出错:
1.ldconfig 动态库路径
2.将库文件复制到 /usr/bin 或 /lib目录下面