zoukankan      html  css  js  c++  java
  • Linux上ld和ld.so命令的区别

    显然,ld链接器,它的生命周期是发生在compile-time的,它的一些参数是编译时期gcc给传递的,比如,指定需要链接什么库。

    ld.so命令的周期是发生在run-time的,名字叫动态链接器/加载器。它的作用体现在运行时。比如你链接了指定的库,它运行的时候会根据指定的路径去加载指定的库。

    而命令ld.so相应的配置文件是/etc/ld.so.conf,这是个文本文件,里面可以增加修改so库的搜索路径(与windows下是有区别的,windows下动态库是先搜索当前目录,再去环境变量PATH中搜索,再到系统路径下去搜索),当然也可以通过定义一个$LD_LIBRARY_PATH的环境变量来指定运行时的搜索路径。所以,这个配置文件是不可以被ld链接器使用的。也就是说ld的时候,需要加入-L这个搜索路径参数。

    那么为什么gcc或者ld没被设计成去/etc/ld.so.conf这个文本配置文件里面自动查找库的搜索路径呢?我觉得有以下理由:

    1.太智能(自动化)的设计会让系统变得更加复杂和难以理解。

    2.gcc是与不同的动态链接器/加载器一起工作的,这样机制分离,有助于移植和除错。(说到底还是KISS原则,一个程序只需要做好一件事,不宜过于复杂)

    reference:

    http://stackoverflow.com/questions/14179969/whats-the-different-between-l-libpath-and-etc-ld-so-conf-configure-the-libpat

  • 相关阅读:
    AOP从静态代理到动态代理 Emit实现
    云计算仿真工具CloudSim介绍和使用
    SSH框架中配置log4j的方法
    SSH常见面试题
    第一章
    shell 生成目录的树状视图、生成文件及子目录的汇总信息
    shell拼写检查,利用Linux字典
    SHELL:多文件的重命名和移动
    sort
    tr1
  • 原文地址:https://www.cnblogs.com/foohack/p/4105717.html
Copyright © 2011-2022 走看看