在windows系统中,应用程序加载顺序一般从运目录开始搜索,这样只要把运行库和程序
放在同一个文件夹下就可以了。但是在liunx系统中,一般只有导出的路径才会作为搜索路径,此外/usr/lib /lib这样的系统路径也是搜索路径,不需要主动配置,具体细有很多文档说的很详细。
最近要把写好的程序放到ARM板子上跑,发现本地运行的好好的程序报动态库丢失错误,于是了解了一下liunx的动态库运行时搜索策略,找到一个比较方便的解决方法。
因为我是用cmake做的工程构建,所以使用的也是cmake方方案,比较简单,只需要加入两条cmake指令。
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "\${ORIGIN}/lib")
这两句话的意思构建是使用运行路径选项,并将该选项设置为运行程序目录下的lib文件夹。这样就达到了windows下的效果。
编译出来的运行程序可以通过
readelf -d xxx
查看runpath属性,可以看到目标的runpath已经被更改了。