zoukankan      html  css  js  c++  java
  • 解决linux .so的链接时符号依赖问题

    问题描述

    target: a.out

    SO:libmyfile.so

    依赖描述

    a.out: libmyfile.so

    libmyfile.so:  libssl.so.1.0.0

    libssl.so.1.0.0: libcrypto.so.1.0.0 

    由于make参数的问题,表现为在生成a.out的时候,报错myfile.so有引用了未定义符号找不到,而该符号是出现在libcrypto.so.1.0.0中;

    可疑方案

    指定-L参数,然后分别把ssl,crypto的依赖项以-l参数加入make;编译成功;

    疑问:

    从依赖关系可见,明明我的生成目标是依赖libmyfile.so的,与libmyfile.so的依赖项的关系应该是透明的。为什么需要加到本层目标的参数项中来; 

    正规方法

     仔细检视报错信息会发现,这是ld报错,ld指示可用-rpath指定库加载目录;

    因此,我们应该在生成a.out目标时,除了加上libmyfile.so的依赖以及库搜索目录,还应该为ld指定库加载时依赖项的路径;

    很简单,把so置于同一目录下,在生成可执行目标时,指定-rpath参数;这样就ld自动搜索依赖项了

  • 相关阅读:
    Comparable VS Comparator
    Javascript中this关键字详解
    Runtime、System、Object
    JS IDE
    异常处理
    Throwable vs Exception
    8.4 Java 命名规范
    关键字、标识符、注释、变量
    Docker —— 从入门到实践
    RTC教程
  • 原文地址:https://www.cnblogs.com/qianwen36/p/4173865.html
Copyright © 2011-2022 走看看