so查找顺序

http://blog.csdn.net/21aspnet/article/details/6724457

最后的动态库搜索路径是默认搜索路径/usr/lib。

综合以上结果可知,动态库的搜索路径搜索的先后顺序是:

1.编译目标代码时指定的动态库搜索路径; //-L、-rpath和-rpath-link

2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;

3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;

4.默认的动态库搜索路径/lib;

5.默认的动态库搜索路径/usr/lib。

在上述1、2、3指定动态库搜索路径时,都可指定多个动态库搜索路径,其搜索的先后顺序是按指定路径的先后顺序搜索的。对此本文不再举例说明,有兴趣的读者可以参照本文的方法验证。

http://blog.csdn.net/q1302182594/article/details/42102961( -L、-rpath和-rpath-link的区别)

现代连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性。

比如我们做嵌入式移植时#arm-linux-gcc $(CFLAGS) –o target –L/work/lib/zlib/ -llibz-1.2.3 (work/lib/zlib下是交叉编译好的zlib库),将target编译好后我们只要把zlib库拷贝到开发板的系统默认路径下即可。或者通过-rpath(或-R )、LD_LIBRARY_PATH指定查找路径。

链接器ld的选项有 -L,-rpath 和 -rpath-link,看了下 man ld,大致是这个意思:

-L: “链接”的时候,去找的目录,也就是所有的 -lFOO 选项里的库,都会先从 -L 指定的目录去找,然后是默认的地方。编译时的-L选项并不影响环境变量LD_LIBRARY_PATH,-L只是指定了程序编译连接时库的路径,并不影响程序执行时库的路径,系统还是会到默认路径下查找该程序所需要的库,如果找不到,还是会报错,类似cannot open shared object file。

-rpath和-rpath-link都可以在链接时指定库的路径;但是运行可执行文件时,-rpath-link指定的路径就不再有效(链接器没有将库的路径包含进可执行文件中),而-rpath指定的路径还有效(因为链接器已经将库的路径包含在可执行文件中了。)

时间: 2024-10-01 04:26:32

so查找顺序的相关文章

Yii 2—— layout查找顺序

1.1  layout查找顺序 在应用中添加了一个模块,但是还没有给模块添加layouts,结果发现页面还是可以正常显示,只是layout用的是应用级的layout,有点好奇,于是跟了下代码,在yii2\base\Controller.php的findLayoutFile()看到有如下代码: public function findLayoutFile($view)  {      $module = $this->module;      if (is_string($this->layou

Windows下DLL查找顺序

Windows下DLL查找顺序 作者:Tocy    时间:2014-10-18 一.写作初衷 在Windows下单个DLL可能存在多个不同的版本,若不特别指定DLL的绝对路径或使用其他手段指定,在应用程序加载DLL时可能会查找到错误的版本,进而引出各种莫名其妙的问题.本文主要考虑以下两个方面: a. 参考MSDN,给出Windows下DLL查找顺序 b. 简单使用ProcessMonitor来验证DLL查找顺序 二.DLL查找顺序 (本部分多数内容是参考MSDN上的Dynamic-Link L

python 函数变量查找顺序

python 函数变量的查找顺序:优先级为: 局部---> 全局---> 如果仍没找到,将引发NameError错误. #!/usr/bin/env python #coding:utf-8 #@Author:Andy # Date: 2017/6/14 money = 1000 def tell_info(name): print("%s have %d " % (name, money)) def fun(): money = 10 tell_info('egon')

变量在原型链中的查找顺序

js原型链 下面是一道js题目: [javascript] view plain copy function C1(name){ if(name){ this.name = name; } } function C2(name){ this.name = name; } function C3(name){ this.name = name || "John"; } C1.prototype.name = "Tom"; C2.prototype.name = &qu

模块导入、循环导入、模块查找顺序、相对导入及绝对导入

模块导入 什么是模块 模块:就是一系列功能的结合体 模块的三种来源: 1.内置的(python解释器自带) 2.第三方的(别人写的) 3.自定义的(自己写的) 模块的四种表现形式 1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块) 2.已被编译为共享库或DLL的C或C++扩展(了解) 3.把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包) 包:一系列py文件的结合体 4.使用C编写并连接到pytho

1.模块2.循环导入问题及解决思路3.区分py文件的两种类型4.模块的查找顺序5.模块的绝对导入与相对导入6.项目开发的目录规范

一.模块 什么是模块? 模块就是一系列功能的结合体 模块的三种来源: 1.内置的(python解释器自带的) 2.第三方的(别人写的) 3.自定义的(你自己写的) 模块的四种表现形式: 1.使用python编写的py文件(也就是意味着py文件也是可以称之为模块 2.已被编译为共享库或DLL的或C++扩展(了解) 3.把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包) 4.使用C编写并连接到Python解释器的内置模块 模块选择 1.用别人写好的模块(内置

oop 中的属性查找顺序,派生 覆盖

属性的查找顺序 先找自己的,自己没有找他爸的 这个(他爸 就是父类,自己 就是子类) 派生就是子类的代码 和父类的 代码 不一样时 这就叫做派生子类继承了 父类的 代码 还添加了 自己的新代码 即通常就是派生类而 派生就指的时子类 覆盖 就是 子类中的属性或者方法 和父类 出现的一样 这就叫覆盖 class A: text = "haha" class B(A): text = "heihei" pass b = B()print(b.text)这样你调用 只能调用

继承1.继承,2.属性查找顺序3.子类访问父类内容4.补充,经典类与新式类 --------- # 21

继承: 1.继承 1.1继承 1 '''''' 2 """ 3 1.什么是继承? 4 继承是描述两个对象之间,什么是什么的关系 5 6 案例:麦兜,佩奇,猪刚鬓 -- 都是猪 7 8 在程序中,继承描述的是类和类之间的关系 9 10 例如:a 继承 b,a就能直接使用b已经存在的方法或属性 11 此时,a称之为子类,b被称之为父类,也称为基类 12 13 2.为什么要使用继承? 14 继承的一方制剂使用另一方已经有的东西 15 其目的是:提高重用性(重用已有的代码) 16 1

第十一章、对象属性查找顺序与属性和方法

目录 第十一章.对象属性查找顺序与属性和方法 一.属性查找 二.对象赋属性 三.绑定方法 第十一章.对象属性查找顺序与属性和方法 一.属性查找 对象自身-->子类-->父类(多继承)-->报错 二.对象赋属性 方式一:给自己对象加一个属性 student=Student() student.name='nick' 方拾二:__init__()方法内赋值 方式三:对象.方法 change_name(self,name) self.name='nick' 三.绑定方法 定义在类内部的方法 类

查找-顺序表的查找

相关术语: 查找表:(Search Table)是由同一类型的数据元素(或记录)构成的集合. 关键字:(Key)是数据元素中某个数据项的值,又称为键值,它可以标识一个数据元素. 主关键字:若某个关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary Key).这就意味着,对于不同的记录,其主关键字均不相同.主关键字所在的数据项 成为主关键码. 次关键字:对于那些可以识别多个数据元素(或记录)的关键字,我们称之为次关键字(Second Key). 查找:就是根据给定的某个值,在查找表