共有ライブラリ自身 (.so/.dll) の絶対パスと basename (パスなし・拡張子なし) を取得します。
Linux(gcc) では dladdr() で共有オブジェクトを特定し、realpath() で可能な限り正規化 (絶対化・symlink 解決) します。 Windows(MSVC) では GetModuleHandleEx() で DLL の HMODULE を得て、GetModuleFileNameW() でパスを取得します。
c-modenization-kit sample team
1.0.0
2026/02/23
「絶対パス」は OS/ローダの情報とファイルシステム状態に依存します。 Linux でロード後にファイルが移動/削除される等により realpath() が失敗する場合、可能な範囲で絶対化した文字列を返します。
Windows は基本的にフルパスが得られますが、古い環境では MAX_PATH 制約が残る場合があります。
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
static get_lib_info_status_t copy_str ( char *dst, size_t dst_sz, const char *src )文字列を安全にコピーします (UTF-8 想定だが単なる byte 列として扱う)。
get_lib_info_status_t
static const char *get_ilename_part ( const char *path )パス文字列からファイル名部分 (最後の区切り文字以降) を返します。
const char* ファイル名部分へのポインタ (元の文字列内)。
static void strip_extension_inplace ( char *s )拡張子を取り除きます (その場で書き換え)。
static get_lib_info_status_t get_self_path_posix ( char *out_path, size_t out_path_sz, const void *func_addr ).so 自身の絶対パスを取得します (Linux/Unix)。
dladdr() に指定された関数アドレスを渡して所属共有オブジェクトを取得し、
realpath() で可能な限り絶対化・正規化します。
get_lib_info_status_t
int get_lib_path ( char *out_path, const size_t out_path_sz, const void *func_addr )指定した関数が所属する共有ライブラリ (.so/.dll) の絶対パスを取得します。
関数が成功した場合、0 を返します。失敗した場合は 0 以外を返します。
int get_lib_basename ( char *out_basename, const size_t out_basename_sz, const void *func_addr )指定した関数が所属する共有ライブラリ (.so/.dll) の basename (パスなし・拡張子なし) を取得します。
Linux の .so.1.2.3 のようなバージョン付きは “.so.” より前を basename とみなします。
関数が成功した場合、0 を返します。失敗した場合は 0 以外を返します。
内部関数の戻り値(ステータス)。
| 列挙子 | 値 | 説明 |
|---|---|---|
| MYLIB_OK | 0 | 成功 |
| MYLIB_EINVAL | -1 | 引数不正 (NULL、サイズ0など) |
| MYLIB_ENOBUFS | -2 | バッファ不足 (出力が収まらない) |
| MYLIB_EFAIL | -3 | その他の失敗 (取得不能、OS API 失敗など) |
typedef enum get_lib_info_status_t get_lib_info_status_t;内部関数の戻り値(ステータス)。