qt 获取当前程序运行路径_linux设置软件运行时动态库查找路径

2023-11-15

用习惯了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

  • -I,添加包含路径:-I 在编译时用,告诉编译器去哪个路径下找文件

  • -l,添加引用链接库:-l 在链接时用到,它的作用是告诉链接器,要用到哪个库。如:-l pthread

  • -L,添加链接库路径:-L 后跟路径,告诉链接器从哪找库(.so文件),只有在链接时会用到。

  • -Wl:rpath,添加运行时库路径:-Wl:rpath 后面也是路径,运行的时候用。这条编译指令会在编译时记录到target文件中,所以编译之后的target文件在执行时会按这里给出的路径去找库文件。

一开始我认为编译路径和运行路径应该是一样的才对,为什么要分两个?实际上在配置工程的时候为了标准化,编译出的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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt 获取当前程序运行路径_linux设置软件运行时动态库查找路径 的相关文章

  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • 在 Ubuntu 16.04 上找不到 printf.c

    我最近切换到Ubuntu 16 04 我在用vscode作为 Ubuntu 上的 IDE 我配置了其他语言 但我无法做到这一点C C 我创建c cpp properties json launch json tasks json 当我开始编
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 如何制作和应用SVN补丁?

    我想制作一个SVN类型的补丁文件httpd conf这样我就可以轻松地将其应用到其他主机上 If I do cd root diff Naur etc httpd conf httpd conf original etc httpd con
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟

随机推荐

  • kubeadm常用

    kubeadm常用 配置kubeadm自动补全 初始化一个master节点 导出kubeadm默认配置文件 将node节点加入集群 生成node配置 升级k8s版本 kubeadm升级node 维护或下线node节点 管理kubeadm j
  • 1-2 VS2019常用调试方法(断点设置、条件断点、调试按钮、逐过程、逐语句、监视变量、快速监视)

    文章目录 前言 1 打印数据 2 普通断点 2 1断点快捷键 3 条件断点与条件追踪 4 单步调试 5 添加监视 5 1快速监视 前言 主要调试方法 1 打印数据 2 普通断点 3 条件断点与条件追踪 4 单步调试 5 添加监视 1 打印数
  • JavaWeb自我学习——Request(请求)

    目录 Request 1 继承体系 2 获取请求数据 通用方式获取请求参数 idea模板创建servlet 请求参数中文乱码处理 Tomcat 8 0之后 已将GET请求乱码问题解决 设置默认的解码方式为UTF 8 3 请求转发 请求转发资
  • 中小企业在数字化转型上所面对的问题都有哪些?_光点科技

    随着科技的飞速发展 数字化转型已经成为企业持续发展的必由之路 尤其是中小企业 数字化转型不仅可以提高效率 降低成本 还可以拓展市场 增强竞争力 然而 数字化转型并非一帆风顺 中小企业在这个过程中面临着一系列挑战和问题 1 资金问题 中小企业
  • fb设备驱动1:fb设备的显像原理和步骤

    lcd的显像原理 将DDR内存的一部分划分出来作为显存 显存与lcd显示屏幕之间做一个双向的映射 然后用户只需要将需要显示的内容放入显存之中 然后显存中的内容就会刷新到lcd的储存器中进行显示 显存 在内核之中申请一块内存作为显存 由于内核
  • #ifndef/#define/#endif使用详解

    想必很多人都看过 头文件中的 ifndef define endif 防止该头文件被重复引用 但是是否能理解 被重复引用 是什么意思 是不能在不同的两个文件中使用include来包含这个头文件吗 如果头文件被重复引用了 会产生什么后果 是不
  • spring之AOP总结

    AOP Aspect Oriented Programming 面向切面编程 指在程序运行期间 将某段代码动态的切入到指定方法的指定位置进行运行的这种编程方法 面向切面编程 专业术语 连接点 即指定位置 spring允许你使用通知的地方 每
  • 哈希表以及用js封装一个哈希表

    最近在学数据结构和算法 正好将学习的东西记录下来 我是跟着一个b站博主学习的 是使用js来进行讲解的 待会也会在文章后面附上视频链接地址 大家想学习的可以去看看 本文主要讲解哈希表 其他数据结构后续学完也会持续更新 目录 一 什么是哈希表
  • 8 种最坑的SQL错误用法

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网
  • 解决Windows10提示管理员已阻止你运行此应用的问题

    近日发现Windows10更新后 想查看设备管理器 在此电脑上右键点击管理后 提示 用户账户控制 管理员已阻止你运行此应用 无法打开管理 后来又发现很多重要的地方都出现这个提示 于是在网上找如何解决这个问题的办法 大部分都是修改注册表或者打
  • React的函数编程

    函数式编程的好处是什么 函数式编程是一种编程模式 在这种编程模式种最常用函数和表达式 函数式编程把函数作为一等公民 强调从函数的角度考虑问题 函数式编程倾向用一系列嵌套的函数来解决问题 函数式编程让我们的代码更清晰 每个功能都是一个函数 函
  • 「分享」最全AI合集 全是好玩意!

    哈喽 大家好 木易巷这次给大家带来了最全的AI合集 每一个都功能强大 总有一个是你需要的 话不多说 直接上 1 学英语 Replika 2 Al生成乐曲 AmperMusic IBM Watson Music 3 Al换脸 Deepfake
  • 一款好用的基于vue的录屏插件recordrtc,拿走不谢

    第一步 下载安装包 npm i recordrtc 第二步 复制代码 即可使用
  • c语言--unsigned修饰符

    在C语言中 unsigned是一种无符号整数修饰符 它可以与多个整数类型 如int short long等 结合使用 表示该整数类型只包含非负数值 unsigned修饰的整数类型不保存正负号位 因此可以用来表示更大的正整数范围 例如 uns
  • 静态代码扫描(四)——Java资源关闭研究

    最近一直在研究java资源关闭的检查规则 发现市面上开源的工具针对资源关闭的检测都存在一定不足 同时也无法满足我们业务的需求 所以火线团队针对资源关闭进行了深度的研究 取得了一些不错的进展 但是过程的艰辛也远超了我们的预料 现在就跟大家聊聊
  • 爬虫中连接数据库,两种获取网页内容的方式,BeautifulSoup, 正则表达式的使用,爬json格式文件

    一 连接数据库 1 连接MySQL import pymysql conn pymysql connect host localhost port 3306 user root passwd db charset utf8 cur conn
  • Multi-Camera Support

    Android 9 introduces API support for multi camera devices via a new logical camera device composed of two or more physic
  • 豪斯多夫距离-- Hausdorff distance of convex polygons

    蒙特利尔的麦吉尔大学的计算几何课程资料 原文链接 http cgm cs mcgill ca godfried teaching cg projects 98 normand main html 1 Introduction When ta
  • 总结 图(有向图、无向图、权、度、存储结构、邻接矩阵、领接表 概念)

    20171124 图的概念 图的基本性质 无向图 有向图 连通图 图的权 有些图的边或者狐剧有与他相关的数字 这种与图的边或者狐相关的数叫做权 图的度 无向图顶点的边数叫度 有向图顶点的边数叫出度和入度 图的数据存储结构 邻接矩阵 带权邻接
  • qt 获取当前程序运行路径_linux设置软件运行时动态库查找路径

    用习惯了windows 在linux下写代码 涉及到动态库 总是要复制到 usr lib里 觉得不方便 特别是调试的时候 不想复制过 特地找了一下怎么设置动态库查找路径 这里记录一下 程序是通过环境变量LD LIBRARY PATH的路径来