मैं प्रोग्रामिंग रूप से लिनक्स और सोलारिस पर अपनी बाइनरी से जुड़े साझा पुस्तकालयों की एक सूची प्राप्त करना चाहता हूं। अभी मैं pmap के लिए बाहर खोल (मैं द्विआधारी पर ldd
उपयोग नहीं कर सकते क्योंकि यह dlopen'd पुस्तकालयों शामिल नहीं किया जाएगा, और मैं pldd
उपयोग नहीं कर सकते क्योंकि यह सोलारिस केवल है):सी ++ से निष्पादन योग्य साझा लाइब्रेरी सूची कैसे प्राप्त करें?
std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");
यह वह जगह है थोड़ा सा हैक लेकिन यह सोलारिस और लिनक्स दोनों पर काम करता है (pmap आउटपुट थोड़ा अलग है लेकिन वांछित जानकारी हमेशा अंतिम कॉलम में होती है)। क्या बिना किसी जानकारी के एक ही जानकारी प्राप्त करने का कोई तरीका है? यह दोनों प्लेटफार्मों पर काम करता है? मुझे लगता है कि /proc/$PID
फ़ाइलों को उनके बीच अलग रूप से स्वरूपित किया गया है, लेकिन मुझे नहीं पता कि हेडर उन लोगों को पार्स करने में सहायता के लिए कहां स्थित हैं (यदि कोई सामान्य स्थान है?)।
कड़ाई से बोलने 'dlopen'ed पुस्तकालय "लिंक नहीं" हैं, वे रनटाइम पर लोड हो जाते हैं। मुझे लगता है कि आप वास्तव में सभी भारित साझा पुस्तकालयों की एक सूची चाहते हैं? –
यह सही है। –