LinuxとSolarisでバイナリでリンクされた共有ライブラリのリストをプログラムで取得したいと思います。今、私は(それがdlopen'dライブラリが含まれませんので、私はバイナリにldd
を使用することはできません、それが唯一のSolarisだから、私はpldd
を使用することはできません)のpmapに殻から取り出す:C++から実行可能な共有ライブラリのリストを取得するには?
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
ファイルのフォーマットが異なっていると仮定していますが、一般的な場所を解析するためのヘッダーがどこにあるのかわかりません(共通の場所がある場合は?)。
厳密に言えば、 'dlopen'edライブラリはリンクされておらず、実行時に読み込まれます。私はあなたが実際にロードされた共有ライブラリのリストを望んでいると思いますか? –
それは正しいです。 –