Chinaunix

标题: 如何取得程序所在的路径 [打印本页]

作者: fl3w    时间: 2009-07-20 14:47
标题: 如何取得程序所在的路径
rt
类似于 dirname( argv[0]), 不过,由于这个方法会做成so,没法取得 argv[0].
也就是,如果这个 libfl3w.so在 /usr/local/mylib/libfl3w.so ,那么,无论在任何地方调用这个so里面的函数,都能得到 /usr/local/mylib/

这个该如何实现?
作者: fl3w    时间: 2009-07-20 18:10
up,这么多人看了,难道就没人能指点下?
作者: ubuntuer    时间: 2009-07-20 19:56

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

没太懂你意思
作者: fl3w    时间: 2009-07-21 10:55
char* get_lib_path(void)


就是实现这么个方法,返回so所在的路径,无论从何处调用这个so中的方法。
作者: MMMIX    时间: 2009-07-21 11:08
原帖由 fl3w 于 2009-7-21 10:55 发表
char* get_lib_path(void)

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

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

BTW,你为什么想要这个?这个在什么地方能用得上?
作者: windaoo    时间: 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 编辑 ]
作者: fl3w    时间: 2009-07-21 19:37
扯皮用的,一群白痴乱改生产环境,出了问题又死不认帐,所以需要打印出一些位置信息让他们老实点。
作者: MMMIX    时间: 2009-07-21 19:56
原帖由 windaoo 于 2009-7-21 11:48 发表
同问楼主,你为什么想要这个?这个在什么地方能用得上?

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

vo ...

nice
作者: swxlion    时间: 2009-07-22 11:49
原帖由 fl3w 于 2009-7-21 19:37 发表
扯皮用的,一群白痴乱改生产环境,出了问题又死不认帐,所以需要打印出一些位置信息让他们老实点。


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




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2