c语言由文本到二进制的过程 :编译 -> 汇编 -> 链接
动态库是程序链接的时候被链接,使用动态库的好处:
-如果多个程序使用同一个动态库,如果动态库出现bug,不需要升级所用该动态库的程序,只要升级该动态库。
-该动态库只有这一个,没有其他副本,节省内存空间
静态库是编译的时候被载入,使用静态库的好处:
-使用静态库编译好的 程序在任何机器上都可以直接运行。
-如果有多个程序使用该静态库,如果升级该静态库,使用该静态库的所有的软件都要重新编译。
在使用动态库的时候,经常会出现动态库未被发现:undefined reference to ‘函数名’
ldd 可执行文件 #查看哪个库没有被发现
解决方法
以把当前路径加入
#vim /etc/ld.so.conf
1 include ld.so.conf.d/*.conf
2 /usr/local/gcc/gmp-4.3.2/lib
3 /usr/local/gcc/mpfr-2.4.2/lib
4 /usr/local/gccc/mpc-0.8.1/lib
5 /home/xiaowei/metad/dev/metad/plugins/netflow_v9/src
然后:
#ldconfig
在使用的时候:
gcc -fPIC -shared libaa.so aa.c
gcc -o list list.c -L. -laa
-L:表示共享库路径
静态库
#gcc -c hello.c 这里没有使用-shared选项
#ar -r libhello.a hello.o
在程序中链接静态库
#gcc test.c -lhello -L. -static -o hello.static
时间: 2024-10-07 18:36:34