2012-06-16 7 views
12

पर libC++ या libstdC++ के साथ बनाई गई लाइब्रेरी थी, मै मैक पर libC++ या libstdC++ के साथ लाइब्रेरी कैसे बनाई गई है, तो मैं कैसे बता सकता हूं?मैक

मैं otool -एल उपयोग किया गया है, लेकिन इस (मैक कोई ldd है)

मैं पुस्तकालय एक्स है, तो मैं अगर मैं इसे फिर से बनाने के रूप में मैं से स्थानांतरित किया है जानना चाहता हूँ यह दिखाने के लिए प्रतीत नहीं होता जीसीसी को झुकाव मैंने जीसीसी के साथ कई पुस्तकालयों का निर्माण किया है, मैक पुस्तकालयों को आमतौर पर क्लैंग AFAIK के साथ बनाया जाता है।

उत्तर

3

गतिशील पुस्तकालयों के लिए, otool -Llibstdc++ दिखाएगा यदि यह उस पुस्तकालय के विरुद्ध बनाया गया था (यानी यदि यह सी ++ था)।

स्थिर पुस्तकालयों के लिए, प्रश्न समझ में नहीं आता है। स्टेटिक पुस्तकालय अन्य पुस्तकालयों के खिलाफ नहीं बनाए गए हैं।

और आपको कुछ भी पुनर्निर्माण नहीं करना चाहिए क्योंकि आप कंपाइलर्स बदल रहे हैं। केवल एक, सिस्टम-व्यापी सी ++ लाइब्रेरी है और इसमें एक स्थिर एबीआई है।

+0

हम्म - एबीआई पर आपकी टिप्पणी libC++ v libstdC++ के बारे में सही नहीं लगती है - http://stackoverflow.com/a/8457799/1460739 – user1460739

+0

समस्या संकलक परिवर्तन कम है, मानक पुस्तकालय परिवर्तन अधिक है। – user1460739

+1

वह अन्य प्रश्न किसी विशेष सी ++ लाइब्रेरी का उपयोग करके विशेष रूप से प्रोग्राम को संकलित करने के बारे में था, लेकिन उसी सी ++ लाइब्रेरी के विरुद्ध संकलित नहीं की गई लाइब्रेरी के खिलाफ लिंक करना। यदि आप संकलक को बिना ओवरराइड किए अपनी चीज़ करते हैं, तो आपको सिस्टम सब कुछ के लिए सिस्टम stdC++ लाइब्रेरी मिलती है और यह काम करता है। यदि आप इसे ओवरराइड करते हैं, तो आपको इसे सबकुछ के लिए उसी तरह ओवरराइड करना होगा। –

8

स्टेटिक पुस्तकालय: nm -a helloworld.a | grep __1

आप लाइनों __1 युक्त, उदा देखते हैं, तो __121__basic_string, तो पुस्तकालय libC++ के साथ संकलित किया गया था। हालांकि यदि फ़ंक्शन हस्ताक्षर में से कोई भी C++ मानक लाइब्रेरी प्रकार का उपयोग नहीं करता है, तो यह काम नहीं कर सकता है।

गतिशील पुस्तकालय: libC++ या libstdC++ dylib पर निर्भरता के लिए otool -L helloworld

देखो।