linux c++ 加载动态库常用的三种方法
链接库时的搜索路径顺序: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
linux c++ 加载动态库常用的三种方法的更多相关文章
- VC中加载LIB库文件的三种方法
VC中加载LIB库文件的三种方法 在VC中加载LIB文件的三种方法如下: 方法1:LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中&quo ...
- android加载大量图片内存溢出的三种方法
android加载大量图片内存溢出的三种解决办法 方法一: 在从网络或本地加载图片的时候,只加载缩略图. /** * 按照路径加载图片 * @param path 图片资源的存放路径 * @para ...
- 页面加载即执行JQuery的三种方法
[1]$(function( ){ }): $(function(){ $("#name").click(function(){ //adding your code here } ...
- Linux下c函数dlopen实现加载动态库so文件代码举例
dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了. ...
- QT常用代码之加载动态库和弹出对话框
作者:朱金灿 来源:http://blog.csdn.net/clever101 加载动态库的代码: typedef void (*Execute)(); // 定义导出函数类型 QString st ...
- 【转载】cocos2dx 中 Android NDK 加载动态库的问题
原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...
- QLibrary 加载动态库
阅读本文大概需要 6.6分钟 一般情况下在没有头文件支持情况下,想要引入某个动态库,最好的办法就是使用「动态加载」的方法,在Qt中一般使用QLibyary来操作 常用 api QLibrary(con ...
- LoadLibrary加载动态库失败
[1]LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对.此场景细分为以下几种情况: 1.1 文件路径的确错误.比如:本来欲加载的是A文件夹下的动态库a.dl ...
- Windows平台LoadLibrary加载动态库搜索路径的问题
一.背景 在给Adobe Premiere/After Effects等后期制作软件开发第三方插件的时候,我们总希望插件依赖的动态库能够脱离插件的位置,单独存储到另外一个地方.这样一方面可以与其他程序 ...
随机推荐
- IOS开发-UI学习-UITabBarController的使用
UITabBarController具体实例如下图 我们最常见的就是微信最下面的四个按钮,通过这四个按钮可以导航到不同的界面. UITabBarController是一个容器,以下的例程中给UITab ...
- IOS开发-UI学习-沙盒机制&文件操作
苹果为软件的运行提供了一个沙盒机制 每个沙盒含有3个文件夹:Documents, Library 和 tmp.因为应用的沙盒机制,应用只能在几个目录下读写文件 Documents:苹果建议将程序中 ...
- UVa 10299 - Relatives
题目大意:Euler's Totient的应用. 几乎和UVa 10179 - Irreducable Basic Fractions一样,于是偷了个懒,直接用10179题的代码,结果WA了,感觉一样 ...
- vs2015编译mysql c++ connector
目前MySQL Connector/C++的binary版本最高只支持VS2008,VS2015需要下载源码自行编译. 1.CMAKE 到官网下载最新的稳定版本 把bin目录添加到环境变量PATH中 ...
- 动态添加试题选项按钮 radioButton(一)
最近在做WebView加载试题的功能,但是选项按钮如果放的WebView中,点击时反应很慢.于是把选项用原生的RadioButton,而试题题目和答案放在WebView中.但是选项的个数不确定,所以需 ...
- 大数据全栈式开发语言 – Python
前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...
- Oracle 11g RAC使用Manual和Policy Managed方法配置(转)
原文地址:http://czmmiao.iteye.com/blog/2128771 软件环境: 操作系统:Red Hat Enterprise Linux 5.4(Tikanga)Oracle:11 ...
- 在发板实现24位jpg和bmp图片用手划动显示上一张与下一张图片
arm-linux-gcc test.c -ljpeg -I /usr/local/libjpeg-8a/include/ -L /usr/local/libjpeg-8a/lib/ 这样编译 代码 ...
- iOS 之UICollectionView 开发步骤 之 OC
说起来容易做起来难. 那么我就不说了,来做吧.这就是我的style. 鉴于现在的主流还是OC,那么示例程序还用OC来写,后续补写Swift程序,这里先占个坑. 废话不多说,下面开发步骤来了: 1. 创 ...
- 日历视图(CalendarView)组件的功能和用法
日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触摸来滚动日历.如果希望监控该组件的日历改变,可调用CalendarView的setOnDateChangeLi ...