链接选项rpath,容易被忽略的一个功能
2014-05-07 18:28
323 查看
问题来源
最近在做一个项目的客户端的SDK,实现为一个动态链接库,其依赖于其他的若干个动态库文件。那么在利用SDK开发应用程序的时候,编译的时候除了链接SDK库本身,还得链接SDK库所依赖的库,这样编译命令里面得一一的添加这些库。比如,SDK库的名称为liba.so, 其依赖于libb.so和libc.so,那么在编译应用程序的时候使用以下命令:
+++++++++++++++++++++++++++++++++++++++++++++
gcc -o test test.c -I. -L. -la -lb -lc
+++++++++++++++++++++++++++++++++++++++++++++
但是如果将SDK库即liba.so交给其他的开发人员,其他的开发人员可不想编译的时候,显示的链接liba.so所依赖的库。他们更愿意编译的时候,只显示地链接liba.so。
那么该怎么做呢?利用rpath这个链接选项!
解决方法
首先来man ld,查找链接选项rpath的含义:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-rpath dir
Add a directory to the runtime library search path. This is used when linking an ELF executable with
shared objects. All -rpath arguments are concatenated and passed to the runtime linker, which uses
them to locate shared objects at runtime. The -rpath option is also used when locating shared objects
which are needed by shared objects explicitly included in the link; see the description of the
-rpath-link option. If -rpath is not used when linking an ELF executable, the contents of the environ-
ment variable "LD_RUN_PATH" will be used if it is defined.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
简单翻译下, rpath链接选项主要有两个功能:
(1)程序运行时,优先到rpath指定的目录去寻找依赖库
(2)程序链接时,在指定的目录中,隐式的链接那些动态库所需要的链接库。
往往我们都熟知第一个功能,忽略第二个功能。而第二个功能正是现在所需要的。
我们将liba.so,libb.so 和 libc.so拷贝的同一个目录中,然后利用rpath链接应用程序,这样编译便不需要显示的去链接liba.so所依赖的库了。
+++++++++++++++++++++++++++++++++++++++++++++
gcc -o test test.c -I. -L. -la -Wl,-rpath=.
+++++++++++++++++++++++++++++++++++++++++++++
相关文章推荐
- 分享:动态库的链接和链接选项-L,-rpath-link,-rpath
- 关于指向结构体的指针——又一个指针用法中容易忽略的问题
- STL容器的size()函数的一个容易忽略的点
- 在页面上点击一个链接,跳转到与指定QQ聊天的功能
- EPLAN 部件库中一个被容易遗漏的功能——“新变量”
- 动态库的链接和链接选项-L,-rpath-link,-rpath
- 动态库的链接和链接选项-L,-rpath-link,-rpath
- 动态库的链接和链接选项-L,-rpath-link,-rpath
- 一个简单的优酷视频链接探测与分享功能
- hdu 1011 树dp还是容易理解的,不过在做这个题的时候把一个边界条件给忽略了,以后得注意
- 页面回发,一个容易被忽略的问题!
- 一个容易忽略的陷阱:修改字符串常量的值
- GCC链接选项-L,-rpath-link和-rpath
- Start()函数与Awake()函数 一个容易被忽略的差别
- 主流报表制作工具之王者争夺战:功能大PK系列之一个单元格设置多个超级链接
- 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
- GCC链接选项-L,-rpath-link和-rpath
- Wise Installation 9 的一个容易忽视的选项
- 不常用≠没用 Win7容易忽略的四个功能
- Bitmap使用容易被忽略的一个小问题点