2008-11-19 16 views
7

मैं एक निजी परियोजना है, जो पुस्तकालयों में से एक संख्या पर निर्भर के लिए पुस्तकालय संकलन कर रहा हूँ। विशेष रूप से निर्भरताओं में से एक फोरट्रान के साथ संकलित है। कुछ मामलों में, मैंने g77 के साथ संकलित निर्भरता देखी है, अन्य लोगों पर मैंने इसे gfortran के साथ संकलित देखा है। मेरा प्रोजेक्ट ./configure 'डी -lg2c या -lgfortran से लिंक करने के लिए है, लेकिन अब तक मैं इसे हाथ से कर रहा हूं।पता लगाने के लिए कैसे जो संकलक इस्तेमाल किया गया था: G77 या gfortran

यदि यह संभव है, मैं कैसे बाहर निर्भर पुस्तकालय में देख से प्राप्त कर सकते हैं, (के माध्यम से जैसे nm या कुछ अन्य उपयोगिता?), चाहे इस्तेमाल किया संकलक g77 था (और फिर मैं अपने लिंक विकल्प में -lg2c इस्तेमाल करेंगे) या gfortran (और फिर मैं -lgfortran का उपयोग करूंगा)?

अग्रिम धन्यवाद!

उत्तर

6
nm filename | fgrep ' __g77' 

परिणाम दे अगर जी -77, इस्तेमाल किया गया था इस बीच

nm filename | fgrep '@@GFORTRAN' 

अगर gfortran प्रयोग किया जाता है परिणाम देगा होगा।

1

आप संकलित कोड एक या दूसरे से कार्यों का उपयोग करता है, तो एनएम का उपयोग कर, और देख कर यह पता लगा करने में सक्षम हो सकता है, लेकिन है कि काफी हैक है। आप यह समझने में सक्षम हो सकते हैं कि कौन सी लाइब्रेरी उपलब्ध है (यदि कोई libg2c उपलब्ध नहीं है, तो यह g77 नहीं था, उदाहरण के लिए), लेकिन फिर भी उपलब्ध होने पर आपके पास अभी भी कुछ अस्पष्टता है। यदि आप निर्भरता स्वयं बना सकते हैं, तो आप अपने निर्माण प्रक्रिया का एक हिस्सा उपयोग कर सकते हैं किसी अन्य भाग को किसी भी तरह (चर, फ़ाइल, इत्यादि) बताएं जिसे आपने उपयोग किया था।

3

तुम कुछ के लिए grep के लिए, nm filename के उत्पादन में की जरूरत है, कि यह दर्शाता है कि जी -77 या gfortran इस्तेमाल किया गया था। ज्यादातर मामलों में, यदि पुस्तकालय एक ही स्थान पर कम से कम इनपुट-आउटपुट में करता है, यह libg2c या libgfortran कॉल करेंगे और आप इसे में g77, या gfortran के साथ एक प्रतीक देखेंगे।

nm filename | grep _g77_ 
nm filename | grep _gfortran_ 

दो टिप्पणियां::

  1. @@GFORTRAN सुझाव geocar के रूप में के लिए Grepping विश्वसनीय नहीं है: तो, आपका सर्वश्रेष्ठ दांव ग्रेप उपयोग करने के लिए है, जहां पुस्तकालय-संस्करण समर्थित है यह केवल प्लेटफार्मों पर काम करेगा, जो उदाहरण शामिल है लिनक्स लेकिन विंडोज या मैक ओएस नहीं।
  2. यह अभी भी संभव है कि कुछ संकलित कोड कॉल बिल्कुल कोई समर्थन पुस्तकालय समारोह (यदि सभी यह होता है साधारण अंकगणित और नहीं इनपुट-आउटपुट है, उदाहरण के लिए) है। उस स्थिति में, जब तक कि यह डिबगिंग विकल्पों के साथ संकलित नहीं हो जाता है, यह बता देना असंभव है कि कौन सा कंपाइलर आउटपुट करता है।
संबंधित मुद्दे