0

例として、libtest.dylib という名前の dylib があり、別のプロセスで dlopen(/usr/local/path/libtest.dylib, RTLD_NOW|RTLD_GLOBAL) を介してこれをロードしています。

libtest.dylib 内に、ロードされた dylib のパスを返す std::string find_loaded_dylib_path() というメソッドがあります。

どうすればそれを行うことができますか?参考になるサンプルプログラムがあれば

プラットフォーム: Mac OSX 言語: C++、C

ありがとう、

4

1 に答える 1

1

を使用するdladdr()と、特定のシンボルを含むイメージに関する情報が得られます。AC ソリューション (私は C++ よりもよく知っています) は次のようになります。

#include <dlfcn.h>

char *my_dylib_path(void)
{
    Dl_info info;
    if (dladdr(my_dylib_path, &info) != 0) {
        return strdup(info.dli_fname);
    } else {
        // this should not happen :-)
        return NULL;
    }
}

「my_dylib_path」は動的ライブラリ自体のシンボルであるという考え方です。

「通常の」共有ライブラリでこれをテストしましたが、経由でロードされた動的ライブラリでも動作するはずdlopen()です。

于 2013-09-05T12:13:04.093 に答える