g++中的rpath和runpath
本文为原创文章,转载注明出处,欢迎关注网站https://hkvision.cn
缘由 最近在弄Linux上的程序,然后由于涉及到要调用mkl的包(armadillo中用mkl+openblas要快很多),而mkl安装的时候库是不会进入/usr/lib这样的系统路径下的,然后引发了一些问题。
链接 稍微对程序的加载等方面熟悉一点的童鞋会知道,C++分为编译链接和运行两个部分,对于g++这样的编译器来说,需要链接器知道要加载的动态链接库(共享对象)的位置,对于一个二进制文件来说,在运行的时候也需要知道动态链接库的位置,这就涉及到两个链接,一个是编译时链接,一个是运行时链接。
在g++中,这两个链接是由两个参数来控制的,一个是-L,一个是-Wl,-rpath,由于之前弄明白链接的过程之后使用了这两个参数,程序没有出问题。但是这次我发现即使配置了这两个参数仍然有问题,上网查了一下,又深入了一点点。
rpath和runpath 这涉及到另外一个小知识,大家应该知道Linux中的可执行文件是elf格式的文件,这种文件以段来进行区域划分,在可执行文件的elf中,就存在一个section,名字叫做rpath,这里面存储了执行这个文件的时候搜索库的位置,因此在加载可执行文件的时候就会在这个位置搜索库。……