Linux+qt:获取.so自身的路径(利用dladdr)

目录

1、QDir::currentPath()

2、QAppllication::appllicationDirPath()

3、获取.so自身的路径(利用dladdr)


Qt中,也有相关的接口获取程序的相关路径的。

先了解下相关的接口:

1、QDir::currentPath()

(1)在Linux系统下,在Qt Creator的编译器里面直接点击运行时候,这个路径是这个编译器所在的位置:

/opt/Qt5.7.1/Tools/QtCreator/bin

(2)要是在终端直接运行这个程序的话,这个路径是当前程序所在的位置:

2、QAppllication::appllicationDirPath()

而无论你通过何种途径去运行exe文件,QAppllication::appllicationDirPath()的路径始终都是exe文件所在的绝对路径。 因此,如果想要获取固定的exe路径信息,还是建议使用QAppllication::appllicationDirPath()

3、获取.so自身的路径(利用dladdr)

上面2种方法都不能实现获取.so自身的路径,故另辟蹊径。

cpp 复制代码
#include <QDebug>
#include <dlfcn.h>

void getCurrentDllPath()
{
    return;
}


void Func()
{
    Dl_info info;
    //dladdr获取某个地址的符号信息
    int rc = dladdr((void*)getCurrentDllPath, &info);
    if (!rc)
    {
        QString strError = QString("Problem retrieving program information for %1").arg(dlerror());
        qDebug() << __FUNCTION__ << strError;
        return;
    }

    QString strPath = "";
    //info.dli_fname是当前动态库的路径:还带有当前动态库的名字
    strPath = info.dli_fname;

    // 主要是把当前的动态库名字部分去掉,只需要当前目录的路径
    strPath = strPath.mid(0, strPath.lastIndexOf("/"));
    qDebug() << "Current path : " << strPath;
}
相关推荐
钱彬 (Qian Bin)7 小时前
项目实践17—全球证件智能识别系统(开发基于LabelMe标注的可视化审核接口)
qt·fastapi·全球证件识别
哈哈不让取名字7 小时前
基于C++的爬虫框架
开发语言·c++·算法
花间相见7 小时前
【JAVA开发】—— Nginx服务器
java·开发语言·nginx
扶苏-su7 小时前
Java---Properties 类
java·开发语言
一条咸鱼_SaltyFish9 小时前
远程鉴权中心设计:HTTP 与 gRPC 的技术决策与实践
开发语言·网络·网络协议·程序人生·http·开源软件·个人开发
我即将远走丶或许也能高飞9 小时前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
沐知全栈开发9 小时前
SQL LEN() 函数详解
开发语言
钟离墨笺9 小时前
Go语言--2go基础-->基本数据类型
开发语言·前端·后端·golang
小郭团队10 小时前
1_7_五段式SVPWM (传统算法反正切+DPWM3)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·算法·matlab·dsp开发
C+-C资深大佬10 小时前
C++风格的命名转换
开发语言·c++