动态库的制作方式以及出错的解决方案

动态库的生成

  1. 将.c文件生成.o文件,然后在生成与位置无关的代码(-fPIC)

    # 生成动态库
    gcc -c add.c -o add.o -fPIC 
    
  2. 使用gcc -shared 制作动态库

    # 制作动态库
    gcc -shared lib库名.so add.o sub.o div.o
    
  3. 编译可执行程序的时候,指定所使用的动态库。 -l:指定库名 -L:指定库路径

    # 编译可执行程序
    gcc test.c -o a.out -lmymath -L./lib
    
  4. 运行可执行程序 ./a.out 出错

    原因:

    • 链接器:工作在链接阶段
    • 动态链接器:工作与程序运行阶段,工作时需要提供动态库所在目录路径

    解决方式

    1. 通过环境变量 export LD_LIBRARY_PATH = 动态库路径,重启终端的时候会失效
    2. 永久生效,可以将export LD_LIBTRARY_PATH写入到.bashrc中,每次开启都会自动运行
    3. 拷贝自定义动态库到/lib里面(标准c库所在的目录位置)
    4. 配置文件法:
      • 修改/etc/ld.so.conf
      • 写入动态库的绝对路径 保存
      • sudo ldconfig -v 使配置文件生效
      • 使用ldd a.out 可以进行查看
原文地址:https://www.cnblogs.com/fandx/p/12456526.html