linux动态库

参考资料:

1.博客1:https://www.cnblogs.com/zuofaqi/p/10440754.html

2.博客2:https://blog.csdn.net/wangsiman/article/details/80031397

3.博客3:https://blog.csdn.net/chenzixun0/article/details/56278632

最近在做OTA相关工作,需要将不同架构(arm和x86)下的程序统一放到一个架构(arm)下进行统一管理。

涉及到的问题,不同程序有不同链接的动态库(xx.so),如何对一个ELF文件(linux下的可执行文件)进行正确的动态库链接?

记录:

1.看看操作系统的架构

命令:uname -a

x86:

 arm:

2.查看ELF文件本身和动态库链接情况:

file xx(文件名)

观察发现这个是在arm平台下编译出的(或者用的是arm平台下的编译器)

 ldd xx(文件名)

观察发现又许多动态库没有链接,not found

3.找到开发这个程序的同事,问他要需要链接的库...

嗯,假装找到了!在xx路径下,比如/lib64下

关于怎么链接动态库网上有很多教程,这里只推荐用环境变量的方式,比较灵活,在程序运行的时候可以写脚本指定

export  查看当前的环境变量使用情况

观察发现没有LD_LIBRARY_PATH这个变量,这个变量即指定链接动态库的搜索路径

 执行命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../lib64

如果链接多个目录,用:分割,比如export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../lib64:其他路径:...

 然后export再执行会看到LD_LIBRARY_PATH已经出现了

执行命令:ldd xx(文件名)

 刚刚未找到的动态库找到了,当然,你要使用正确的动态库和路径才行,这时候运行改elf文件应该问题不大了。

注意这种方法重启后需要重新指定环境变量LD_LIBRARY_PATH

PS:

1、unset LD_LIBRARY_PATH 这个命令可以重置环境变量,当然也可以不重置直接覆盖;

2、export 环境变量后,可以执行ldconfig -p打印出当前缓存文件所保存的所有共享库(动态库)的名字,看看刚刚添加的动态库有没有;

      ldconfig 用法:https://blog.csdn.net/chenzixun0/article/details/56278632

原文地址:https://www.cnblogs.com/kongweisi/p/14736346.html