2025年动态库的两种调用方式(动态库调用方法)

动态库的两种调用方式(动态库调用方法)Linux 系统上有两类根本不同的 Linux 可执行程序 第一类是静态链接的可执行程序 它们是 完整的 静态可执行程序不依赖任何外部库就可以运行 第二类则是动态链接的可执行程序 他们在执行时还需要动态地调用其他库 对其他库存在依赖 这样做的好处就是减小了自己程序的大小 而我们要关注的

大家好,我是讯享网,很高兴认识大家。



Linux 系统上有两类根本不同的 Linux 可执行程序。

  • 第一类是静态链接的可执行程序。它们是“完整的”,静态可执行程序不依赖任何外部库就可以运行
  • 第二类则是动态链接的可执行程序,他们在执行时还需要动态地调用其他库,对其他库存在依赖,这样做的好处就是减小了自己程序的大小。而我们要关注的 文件就是一个包含要搜索的动态链接库目录的清单

    对于此种情况有2种解决办法:
(1)在用源码安装时,用--prefix指定安装路径为/usr/lib。这样的话也就不用配置PKG_CONFIG_PATH
  (2) 直接将路径/usr/local/lib路径加入到etc/ld.so.conf文件中。然后sudo ldconfig

动态装入器找到共享库要依靠两个文件:和

ldconfig是用来管理和更新系统动态链接库的工具,它会根据/etc/ld.so.conf文件中的路径创建软链接,并生成缓存文件/etc/ld.so.cache。

需要运行sudo ldconfig的情况:

1)当安装了新的库文件

2)修改/etc/ld.so.conf,增加了库的新的搜索路径

如果没做,可能会找不到刚安装的库。

默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录。


讯享网

        若在和之外的目录中添加库文件,而又不在中写入路径,此时可以用添加环境变量的做法让系统识别到库文件。
  
  同时变量可以指示动态装入器首先检查某个目录,可以按照我们希望的优先级进行搜索,多个路径之间用冒号分隔;例如:

export LD_LIBRARY_PATH=/usr/local/lib/:/opt/lib

所有从当前 shell 启动的可执行程序都将使用 或 中的库,如果仍不能满足一些共享库相关性要求,则转回到 中指定的库。

 

方法一: 终端上输入以下命令,但是退出当前终端后就失效

export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/xxxxx/lib

方法二: vim ~/.bashrc, 添加

export LD_LIBRARY_PATH=/opt/xxxxx/lib:$LD_LIBRARY_PATH

source ~/.bashrc


pkg-config向configure程序提供系统信息,比如软件的版本、库版本、库的路径等,
这些信息只是在编译其间使用。

ls /usr/local/lib/pkgconfig ,会看到许多的*.pc,

 

讯享网

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: Protocol Buffers
Description: Google's Data Interchange Format
Version: 3.0.0
Libs: -L${libdir} -lprotobuf -pthread  -lpthread
Libs.private: 
Cflags: -I${includedir} -pthread
Conflicts: protobuf-lite
 


configure就是靠这些信息判断你的软件版本是否符合要求。并且得到这些库所在的位置.
不用我说你也知道为什么会出现上面那些问题了吧。
所以要正确配置这个环境变量,我的配置是:
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig

讯享网

    linux-vdso.so.1 (0x00007ffe8417a000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f40101fd000)
    libavcodec.so.57 => /usr/lib/x86_64-linux-gnu/libavcodec.so.57 (0x00007f400eadb000)
    libavformat.so.57 => /usr/lib/x86_64-linux-gnu/libavformat.so.57 (0x00007f400e)
    libavutil.so.55 => /usr/lib/x86_64-linux-gnu/libavutil.so.55 (0x00007f400e3f3000)
    libopencv_highgui.so.4.5 => /usr/local/lib/libopencv_highgui.so.4.5 (0x00007f400e1dc000)
 

PATH 环境变量

bin

小讯
上一篇 2025-06-02 20:17
下一篇 2025-04-24 12:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/164932.html