• 利用dladdr来获得so自身的路径



    #include <dlfcn.h> //定义该函数为了dladdr获取符号信息 void fun1() { } Dl_info info; //dladdr获取某个地址的符号信息 int rc = dladdr((void*)fun1, &info); //(void *)转化是关键步骤
    char dir[100];
    strcpy(dir, info.dli_fname); //info.dli_fname存的是包含文件名的路径.

    dladdr的原型:

    int dladdr(void *address, Dl_info *dlip); //这个dladdr这个函数只对动态链接程序起作用。 

    dlip 是指向Dl_info 结构的指针。该结构必须由用户分配。如果指定的address 在其中一个加载模块的范围内,则
    结构成员由dladdr() 设置。Dl_info 结构包含下列成员:
    struct {
    const char *dli_fname;  //这个路径是包含这个共享对象地址的文件路径,以我的理解就是调用这个函数的文件
    void *dli_fbase;
    const char *dli_sname;
    void *dli_saddr;
    size_t dli_size; /* ELF only */
    int dli_bind; /* ELF only */
    int dli_type;
    };

    参考链接:

    1.动态链接库加载拾遗&dladdr函数使用:https://www.jianshu.com/p/1ef4460b63db

    2.https://blog.csdn.net/dragon101788/article/details/18673323

    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    网络相关配置
    RestTemplate 工具类以及拦截器配置打印调用日志
    Redis(2)九大数据类型及落地案例
    JUC(7)ThreadLocal
    JUC(5)原子类
    JUC(6)LockSupport
    JUC(4)Volatile
    JUC(3)Java内存模型JMM
    JUC(1)说说Java“锁”事
    JUC(2)线程中断机制
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/10640471.html
Copyright © 2020-2023  润新知