用习惯了windows,在linux下写代码,涉及到动态库,总是要复制到/usr/lib里,觉得不方便,特别是调试的时候,不想复制过,特地找了一下怎么设置动态库查找路径,这里记录一下
程序是通过环境变量LD_LIBRARY_PATH的路径来查找库,那么我们就修改这个值,添加我们程序所在目录
命令:
export LD_LIBRARY_PATH=自己程序库路径:$LD_LIBRARY_PATH
可以直接在terminal中执行,但是只在当前terminal有效
可以在~/.bash_profilez或者~/.bashrc或者~/.profile或者/etc/profile
第二种方法,可以在编译的时候添加编译选项
-Wl,-rpath,运行库路径
#例如 -Wl,-rpath,./
# -Wl,-rpath,/home/root
# -Wl,-rpath,./:/home/root#也可以写成-Wl,-rpath=运行库路径
#例如 -Wl,-rpath=./# -Wl,-rpath=/home/root# -Wl,-rpath=./:/home/root
这里补充一点,如果是在QT .pro文件里添加,需要添加到LIBS,比如LIBS += -Wl,-rpath=/home/root,如果使用qt的远程调试,这个路径需要绝对路径,不能使用./当前路径,因为调试时的当前路径估计不是软件当前目录
应该还有其他方式设置,以后再记录
参考:
如何让linux加载当前目录的动态库 (OS中的方法)
https://www.cnblogs.com/jiftle/p/7026905.html
g++的编译选项:-Wl,-rpath=
https://www.cnblogs.com/sky-heaven/p/6641832.html
链接选项-I,-l,-L,-Wl:rpath
https://blog.csdn.net/xianxjm/article/details/73609142
一开始我认为编译路径和运行路径应该是一样的才对,为什么要分两个?实际上在配置工程的时候为了标准化,编译出的target(.so或是可执行文件)不一定跟源文件(main.cpp,XX.cpp)放在一个文件夹下。如不在一个文件夹下,在编译时,-L后面跟的是相对于源文件的路径,-Wl:rpath后面跟的是相对于target(.so或是可执行文件)的路径,确切来说是相对于工作目录的路径。QtCreator的工作路径就是target文件的路径,Codebloks的工作路径是.cbp文件的路径。所以不同的IDE在配置有时候会一些细微不同,这些不同一不注意就会有大坑。
估计CodeBlocks在找可执行文件时是用../../这种方式过去的,这样就能在.cbp的文件路径下执行可执行文件。如果用cd会改变工作路径。
Linux下5种动态库运行时搜索路径的方法
https://blog.csdn.net/wh8_2011/article/details/79519293
方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径。
方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。
方法三:在编译目标代码时指定该程序的动态库搜索路径。
以上介绍了三种指定动态库搜索路径的方法,
加上默认的动态库搜索路径/lib 和 /usr/lib,
----------------------
qt 获取当前程序运行路径_linux设置软件运行时动态库查找路径
原文链接:https://blog.csdn.net/weixin_39607090/article/details/112534683