链接库时的搜索路径顺序:LD_LIBRARY_PATH --> /etc/ld.so.conf --> /lib,/usr/lib

方法1. vi .bash_profile
    设置环境变量LD_LIBRARY_PATH并导出

另:

LD_LIBRARY_PATH:启动时连接共享函数库,执行时打开动态函数库首先搜索的路径。

LD_DEBUG:显示运行时的信息,如符号寻找和绑定,重定向,执行等等。

方法2.  a)直接在/etc/ld.so.conf 里添加库路径

b)新建文件,后缀为.conf,添加库路径信息,然后保存放到/etc/ld.so.conf.d/下

最后执行ldconfig命令,重建/etc/ld.so.cache

另:

ldconfig -n 路径名:为指定路径下的函数库创建soname库,但不放入ld.so.cache文件。

/etc/ld.so.conf:存放ldconfig运行时搜索的路径。

/etc/ld.so.cache:存放ldconfig搜索到的库和soname。

ld-linux.so:载入ELF文件用。可执行文件启动,启动时载入共享函数库都要用到这个库。

libc.so:c语言支持库。

libdl.so:动态连接库用。

方法3. 使用rpath将库路径硬编码到可执行文件内部

搜索路径分两种,一种是链接时候的搜索路径,一种是运行时期的搜索路径

单个路径: -Wl,rpath /opt -L/opt -lddd      // 嵌入路径的同时,将库目录指定,使得链接时后面的libddd.so能被找到。

多个路径: -Wl,rpath,/opt:../lib  -L/opt -L../lib  -lddd     //使用-Wl时,后面的参数之间不要有空格!!!

查看生成文件的信息:   readelf -d demo(生成的文件)

9.   Dynamic section at offset 0xc58 contains 26 entries:

10.    Tag        Type                         Name/Value

11.   0x0000000000000001 (NEEDED)             Shared library: [libtmp.so]

12.   0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]

13.   0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]

14.   0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]

15.   0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

16.   0x000000000000000f (RPATH)                 Library rpath: [/tmp/]

17.   0x000000000000001d (RUNPATH)            Library runpath: [/tmp/]

例子:

CC = g++

WORK_DIR =

SRC_DIR = .

OBJ_DIR = ../obj

INC_DIR = ../include

LIB_DIR = ../lib

BIN_DIR = ../bin

CFLAGS = -g -O -Wall -Wuninitialized

CFLAGS += -I$(INC_DIR) -I$(INC_DIR)/test

LDFLAGS += -Wl,-rpath,$(LIB_DIR)/test:$(LIB_DIR)/test2

...

...

...

参考:

http://blog.chinaunix.net/uid-27105712-id-3313327.html

http://www.myexception.cn/other/681660.html

http://blog.csdn.net/defeattroy/article/details/6700616

http://blog.csdn.net/russule/article/details/7057398

http://blog.csdn.net/dbzhang800/article/details/6918413

linux c++ 加载动态库常用的三种方法的更多相关文章

  1. VC中加载LIB库文件的三种方法

    VC中加载LIB库文件的三种方法 在VC中加载LIB文件的三种方法如下: 方法1:LIB文件直接加入到工程文件列表中   在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中&quo ...

  2. android加载大量图片内存溢出的三种方法

    android加载大量图片内存溢出的三种解决办法 方法一:  在从网络或本地加载图片的时候,只加载缩略图. /** * 按照路径加载图片 * @param path 图片资源的存放路径 * @para ...

  3. 页面加载即执行JQuery的三种方法

    [1]$(function( ){ }): $(function(){ $("#name").click(function(){ //adding your code here } ...

  4. Linux下c函数dlopen实现加载动态库so文件代码举例

    dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了. ...

  5. QT常用代码之加载动态库和弹出对话框

    作者:朱金灿 来源:http://blog.csdn.net/clever101 加载动态库的代码: typedef void (*Execute)(); // 定义导出函数类型 QString st ...

  6. 【转载】cocos2dx 中 Android NDK 加载动态库的问题

     原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...

  7. QLibrary 加载动态库

    阅读本文大概需要 6.6分钟 一般情况下在没有头文件支持情况下,想要引入某个动态库,最好的办法就是使用「动态加载」的方法,在Qt中一般使用QLibyary来操作 常用 api QLibrary(con ...

  8. LoadLibrary加载动态库失败

    [1]LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对.此场景细分为以下几种情况: 1.1 文件路径的确错误.比如:本来欲加载的是A文件夹下的动态库a.dl ...

  9. Windows平台LoadLibrary加载动态库搜索路径的问题

    一.背景 在给Adobe Premiere/After Effects等后期制作软件开发第三方插件的时候,我们总希望插件依赖的动态库能够脱离插件的位置,单独存储到另外一个地方.这样一方面可以与其他程序 ...

随机推荐

  1. 简易的AJAX工具[转]

    关键字: ajax 1.创建XMLHttpRequest对象的js文件 Ajax.js function Ajax(){    var xmlHttp=null;    if(window.XMLHt ...

  2. [Angular Tutorial] 9 -Routing & Multiple Views

    在这一步中,您将学到如何创建一个布局模板,并且学习怎样使用一个叫做ngRoute的Angular模块来构建一个具有多重视图的应用. ·当您现在访问/index.html,您将被重定向到/index.h ...

  3. iOS 错误及解决汇总

    1. iOS 错误 之 http请求 2. iOS 错误 之 Unexpected interface name 'HomeListCell': expected expression 3. iOS ...

  4. 前端制作篇之meta标签篇

    移动端前端制作有些地方不同于互联网,这篇主要讨论的是meta标签.meta标签位于之间.是主要辅助HTML结构层的.meta标签不管在互联网前端还是在移动端都起了很重要的作用.这里只讨论移动端. 附上 ...

  5. iOS 之 Quartz2D

    1. Quartz2D 之 简单介绍 2. Quartz2D 之 简单使用 3. Quartz2D 之 绘制文本

  6. Java经典案例之-判断兔子的数量(斐波那契数列)

    /** * 描述:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子, * 假如兔子都不死,问每个兔子总数为多少? * 分析:根据题目条件可以推断 * 兔子的规律 ...

  7. HDU-5086-Revenge of Segment Tree

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5086 这题太不应该了,比赛时没做出来,本来呢,以现在的水平这题是能够做出来的,可就是题目理解错了,按题 ...

  8. js url参数的获取和设置以及删除

    //获取url参数的值:name是参数名 function getQueryString(name) { var reg = new RegExp("(^|&)" + na ...

  9. 深入React事件系统(React点击空白部分隐藏弹出层;React阻止事件冒泡失效)

    只关注括号内问题的同学,可直接跳转到蓝字部分.(标题起的有点大,其实只讨论一个问题) 两个在React组件上绑定的事件,产生冲突后,使用e.stopPropagation(),阻止冒泡,即可防止事件冲 ...

  10. loadrunner Analysis :SLA(Service Level Agreement服务水平协议)

    SLA是为负载场景定义的具体目标,用于与实际负载结果比较,确定系统是否达到性能目标. 1.1.1     设置SLA(以Transaction Response Time(Average)为例) 可以 ...