Linux および Solaris でバイナリによってリンクされている共有ライブラリのリストをプログラムで取得したいと考えています。現在、私は pmap にシェルアウトしています ( ldd
dlopen されたライブラリが含まれていないため、バイナリでは使用できず、pldd
Solaris のみであるため使用できません):
std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");
これは少しハックですが、Solaris と Linux の両方で機能します (pmap の出力は少し異なりますが、必要な情報は常に最後の列にあります)。砲撃せずに同じ情報を取得する方法はありますか? それは両方のプラットフォームで動作しますか? ファイルのフォーマットは/proc/$PID
ファイル間で異なると思いますが、それらを解析するためのヘッダーが通常どこにあるのかわかりません (共通の場所がある場合)。