共享库/动态库

动态库的命名规则:lib+库的名字+.so
  libmyname.so

动态库的创建和使用【共享库】

     步骤一:生成对应的.o文件【.c --> .o】
            gcc -fPIC -c *.c -I ../include 生成与位置无关的.o文件【-fPIC 与位置无关】
        步骤二:将生成的.o文件打包成动态库.so文件
            gcc -shared -o libMyCalDll.so *.o 生成动态库libMyCalDll.so
        步骤三:发布动态库生成可执行文件
            方式一:
                gcc main.c lib/libMyCalDll.so -o mysumdll.out -Iinclude
            方式二:
                gcc main.c -Iinclude -L lib -l MyCalDll -o mysum
    
        ldd mysum.out 查看可执行文件在执行过程中所依赖的所有的共享库
            结果:linux-vdso.so.1 =>  (0x00007ffd36291000)
                  lib/libMyCalDll.so (0x00007f1a1e81a000)
                  libc.so.6 => /lib64/libc.so.6 (0x00007f1a1e44c000)【标准C库】
                  /lib64/ld-linux-x86-64.so.2 (0x00007f1a1ea1c000)【动态链接器】
        mysum.out可执行文件使用【动态链接器】调用它所依赖的动态库
    
        解决动态链接库不能被加载到的问题:
            方法一:临时测试
                在环境变量 LD_LIBRARY_PATH 中添加要加载的动态链接库的路径,
                之后动态链接器调用可执行文件依赖的动态库时会先在 LD_LIBRARY_PATH中查找
                之后再从默认的环境变量 PATH 里面按顺序查找
                注意:该方法只能在测试中临时使用,关闭终端设置失效
                export LD_LIBRARY_PATH=./lib【export 导入到系统的环境变量中】
                
            方法二:永久设置
                在当前用户家目录下的隐藏文件.bashrc中添加
                export LD_LIBRARY_PATH=/root/testdandan/Calculator/lib【动态库的绝对路径】
                .bashrc生效需要重启终端
                
            方法三:将该文件放到系统目录下的lib下【不推荐使用】
            
            方法四:永久设置
            1).需要找到动态链接器的配置文件 /etc/ld.so.conf
                    2).将动态库的绝对路径写到配置文件中 /root/testdandan/Calculator/lib
                    3).更新配置
                        ldconfig -v

 

posted @ 2020-12-07 11:39  龙宇在天  阅读(121)  评论(0编辑  收藏  举报
//右侧添加目录 //增加页面点击显示24字社会主义核心价值观