2014-04-11 6 views
6

मान लें कि आपके पास एक क्रॉस-संकलन टूल-चेन है जो एआरएम आर्किटेक्चर के लिए बाइनरी बनाती है।सी/सी ++ नंगे-धातु संकलन और विशिष्ट ओएस (लिनक्स) के लिए संकलन के बीच अंतर क्या हैं?

आपका उपकरण श्रृंखला इस (लिनक्स के साथ एक x86_64 मशीन पर चल) की तरह है:

  • हाथ-linux-gnueabi-gcc.exe: लिनक्स के लिए पार संकलन, एआरएम पर चलने के लिए।
  • arm-gcc.exe: नंगे-धातु क्रॉस-संकलन लक्ष्यीकरण एआरएम के लिए।

... और एआरएम पर क्रॉस-संकलन के लिए अन्य उपकरणों की अधिकता।

अंक है कि मैं में दिलचस्पी रखता हूँ हैं:

  • बाइनरी के बीच (ई) ABI मतभेद (यदि हो तो) नंगे धातु के मामले में
  • सीमाओं (गतिशील स्मृति आवंटन, स्थिर कंस्ट्रक्टर्स के उपयोग की तरह सी ++, थ्रेडिंग मॉडल इत्यादि के मामले में)
  • उनमें से प्रत्येक के लिए विशिष्ट जानकारी के मामले में 2 मामलों के बीच बाइनरी-स्तर अंतर (जैसे डीबग जानकारी समर्थन इत्यादि);
+0

ऐसा लगता है कि "मेरे छोटे कार्यक्रम और मेरे ऑपरेटिंग सिस्टम के बीच अंतर" ... – deviantfan

+0

@deviantfan: "मैं सी/सी ++ की सभी" सामान्य "विशेषताओं का उपयोग कर सकता हूं जिन्हें मैं फर्मवेयर के लिए उपयोग कर रहा हूं (नंगे धातु) विकास? " इस आलेख को यहां पढ़ने के बाद: http://www.state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf मैंने नंगे धातु सी/सी ++ की कुछ सीमाएं देखीं। क्या कोई और (और मतभेद भी) हैं? :) – Liviu

+1

* असली नंगे धातु * के लिए, आपको * newlib * के लिए एक पोर्टेबिलिटी परत लिखनी होगी। जीएनयू लिनक्स पर, या तो * eglibc * या [* glibc *] (http: //en.wikipedia।संगठन/विकी/GNU_C_Library) का उपयोग किया जाता है। असल में, आपका सवाल यह है कि क्या अंतर है। 1000s हैं क्या आप 'mmap()' का उपयोग करना चाहते हैं? आदि बाइनरी/कंपाइलर मतभेद कोई फर्क नहीं पड़ता (ज्यादातर)। यह 'सी' पुस्तकालय है जो पूरी तरह से अलग हैं। फ़ाइल I/O? –

उत्तर

3
  • ABI मतभेद, आप कैसे संकलक आह्वान पर निर्भर है, उदाहरण के लिए जीसीसी -mabi है और यह कि 'APCs-जीएनयू', 'atpcs', 'aapcs', 'aapcs-linux' में से एक हो सकता है और 'iwmmxt'।
  • विभिन्न रनटाइम सुविधाओं के लिए नंगे धातु की सीमाओं पर मौजूद है क्योंकि किसी ने उन्हें प्रदान नहीं किया है। उन्हें शून्य आवंटित क्षेत्रों को प्रारंभ करना या सी ++ सुविधाएं प्रदान करना। यदि आप उन्हें आपूर्ति कर सकते हैं, तो वे काम करेंगे।
  • बाइनरी स्तर के अंतर भी आपके द्वारा संकलक का आह्वान करने के लिए है।

आप GCC ARM options online देख सकते हैं।

1

मैंने हाल ही में एक नंगे धातु वातावरण में लिनक्स मानक सी पुस्तकालय का उपयोग करने के लिए एक छोटी परियोजना शुरू की। मैं इसे अपने ब्लॉग पर वर्णित कर रहा हूं: http://ellcc.org/blog/?page_id=289 मूल रूप से मैंने जो किया है वह लिनक्स सिस्टम कॉल को संभालने का एक तरीका स्थापित करता है ताकि कुछ सिस्टम कॉल के सरलीकृत संस्करणों को लागू करने से मैं मानक लाइब्रेरी से फ़ंक्शंस का उपयोग कर सकूं। उदाहरण के लिए, एआरएम के लिए वर्तमान स्थिति पढ़ने(), readv(), लिखने(), writev() और brk() के सरलीकृत संस्करण लागू करता है। यह मुझे printf(), fgets(), और malloc() अपरिवर्तित का उपयोग करने की अनुमति देता है।

मैं अपना मामला हूं, मैं लिनक्स और नंगे धातु को लक्षित करने के लिए एक ही कंपाइलर का उपयोग करता हूं। चूंकि यह क्लैंग/एलएलवीएम आधारित है, इसलिए मैं अन्य प्रोसेसर को लक्षित करने के लिए एक ही कंपाइलर का उपयोग भी कर सकता हूं। मैं अभी मिप्स के लिए एक नंगे धातु उदाहरण पर काम कर रहा हूं।

तो मुझे लगता है कि जवाब यह है कि इसमें कोई अंतर नहीं होना चाहिए।

संबंधित मुद्दे