RPATH和RUNPATH区别
RPATH和RUNPATH都可以用来在运行时搜索动态库。下面用一个简单的例子说明二者的区别。
一个小工程中,有1个头文件和3个源文件。
头文件sub.h中的内容如下:
源文件a.c中的内容如下:
源文件b.c中的内容如下:
源文件main.c中的内容如下:
在Ubuntu16.04 + gcc5.4中编译,命令及结果如下:
在Ubuntu18.10 + gcc5.4中编译,命令及结果如下:
在Ubuntu18.10中编译生成的app,ldd显示找不到liba.so。但其实liba.so和libb.so在同一目录下,ldd可以找到libb.so,却找不到liba.so。
用readelf -d分析两种环境下生成的app,可以看出Ubuntu16.10中生成的是RPATH,而Ubuntu18.10中生成的是RUNPATH。
在这个例子中,RPATH和RUNPATH的区别可用下面两段话解释:
简单地说,在搜索app的间接依赖库时,RPATH起作用,但RUNPATH不起作用。在使用RUNPATH的情况下,很可能还要再配合LD_LIBRARY_PATH一块使用。
其他问题:
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!