静态库与动态库的制作与使用

静态链接

(1)制作静态链接

#生成目标文件
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
#制作静态库
ar -rcs libmylib.a add.o sub.o

在使用ar工具是时候需要添加参数:rcs

  • r更新
  • c创建
  • s建立索引

(2)使用静态库

gcc main.c -L[静态库路径] -I[头文件路径] -lmylib[库名] -o main

参数说明:

  • -L:表示要连接的库所在目录
  • -I./: I(大写i) 表示指定头文件的目录为当前目录
  • -l(小写L):指定链接时需要的库,去掉前缀和后缀

动态链接

(1)动态库制作

gcc -fPIC -c add.c -o add.o
gcc -fPIC -c sub.c -o add.o
#-fpic 创建与地址无关的目标文件
gcc -shared add.o sub.o -o libmylib.so
#生成共享库,-shared

(2)动态库使用

gcc main.c -L[动态库路径] -I[头文件路径] -lmylib[库名] -o main

(3)让系统找到动态库

  1. 拷贝自己制作的共享库到/lib或者/usr/lib(不能是/lib64目录)

  2. 临时设置LD_LIBRARY_PATH:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径

  3. 永久设置,把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径,设置到

    ~/.bashrc或者 /etc/profile文件中

    vim ~/.bashrc
    #最后一行添加如下内容:
    #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/mylib/
    source ~/.bashrc 
    
  4. 使用符号链接, 但是一定要使用绝对路径

    sudo ln -s /home/me/mylib/libtest.so /lib/libtest.so

原文地址:https://www.cnblogs.com/rookiezjz/p/15810450.html