免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2659 | 回复: 8
打印 上一主题 下一主题

如何取得程序所在的路径 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-20 14:47 |只看该作者 |倒序浏览
rt
类似于 dirname( argv[0]), 不过,由于这个方法会做成so,没法取得 argv[0].
也就是,如果这个 libfl3w.so在 /usr/local/mylib/libfl3w.so ,那么,无论在任何地方调用这个so里面的函数,都能得到 /usr/local/mylib/

这个该如何实现?

论坛徽章:
0
2 [报告]
发表于 2009-07-20 18:10 |只看该作者
up,这么多人看了,难道就没人能指点下?

论坛徽章:
0
3 [报告]
发表于 2009-07-20 19:56 |只看该作者

  1. whereis libfl3w.so?
  2. or locate libfl3w.so?
复制代码

没太懂你意思

论坛徽章:
0
4 [报告]
发表于 2009-07-21 10:55 |只看该作者
char* get_lib_path(void)


就是实现这么个方法,返回so所在的路径,无论从何处调用这个so中的方法。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2009-07-21 11:08 |只看该作者
原帖由 fl3w 于 2009-7-21 10:55 发表
char* get_lib_path(void)

就是实现这么个方法,返回so所在的路径,无论从何处调用这个so中的方法。

这个似乎没有什么可移植的解决方案,不过如果是 Linux 的话,可以解析 /proc/$pid/maps

BTW,你为什么想要这个?这个在什么地方能用得上?

论坛徽章:
0
6 [报告]
发表于 2009-07-21 11:48 |只看该作者
同问楼主,你为什么想要这个?这个在什么地方能用得上?

man 一把 dlfcn.h
注意 dladdr 函数
一个例子(我自己在 Linux 上调试过的):
在你的 .so 中:
#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>

void print_lib_path()
{
        Dl_info dlinfo;

        if (dladdr(print_lib_path, &dlinfo) == 0)
                printf("error\n");
        else
                printf("%s\n", dlinfo.dli_fname == NULL ? "NULL" : dlinfo.dli_fname);
}


[ 本帖最后由 windaoo 于 2009-7-21 11:50 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-07-21 19:37 |只看该作者
扯皮用的,一群白痴乱改生产环境,出了问题又死不认帐,所以需要打印出一些位置信息让他们老实点。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2009-07-21 19:56 |只看该作者
原帖由 windaoo 于 2009-7-21 11:48 发表
同问楼主,你为什么想要这个?这个在什么地方能用得上?

man 一把 dlfcn.h
注意 dladdr 函数
一个例子(我自己在 Linux 上调试过的):
在你的 .so 中:
#define _GNU_SOURCE
#include
#include

vo ...

nice

论坛徽章:
0
9 [报告]
发表于 2009-07-22 11:49 |只看该作者
原帖由 fl3w 于 2009-7-21 19:37 发表
扯皮用的,一群白痴乱改生产环境,出了问题又死不认帐,所以需要打印出一些位置信息让他们老实点。


顶你这句话!
最烦的就是和一群这样的人合作,自己没弄好还赖别人,让别人擦屁股。
所以到后来,我自己写模块的时候,对其它任何环境信息均报以不信任态度。尽可能自己重新获取。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP