zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Oracle文本导入器
    MSLocalDB
    使用OLE DB读写Excel
    万恶的hao123
    Php最近1个月总结
    thinkphp 3+ 观后详解 (5)
    thinkphp 3+ 观后详解 (4)
    thinkphp 3+ 观后详解 (3)
    thinkphp 3+ 观后详解 (2)
    thinkphp 3+ 观后详解 (1)
  • 原文地址:https://www.cnblogs.com/kongweisi/p/14736346.html
Copyright © 2011-2022 走看看