2016-03-10 5 views
8

मैं LibGDX उपयोग कर रहा हूँ Android और iOS दोनों के लिए क्षुधा लिखने के लिए और मैं कुछ भागों और बंदरगाह के लिए कुछ कार्यों आदि का अनुकूलन करने के अपने कुछ ऐप्स के लिए सी ++ कोड जोड़ने के लिए सक्षम होना चाहते हैंमैं एंड्रॉइड और आईओएस दोनों के लिए सी ++ में साझा लाइब्रेरी कैसे बना सकता हूं?

मैं इंटरनेट खोज की है और कोशिश की कुछ ट्यूटोरियल्स का पालन करने के लिए, लेकिन मुझे जो चाहिए वह नहीं मिला।

मैं एक बहुत ही बुनियादी सी ++ लाइब्रेरी कैसे लिख सकता हूं जिसे मैं लिबजीडीएक्स में लोड कर सकता हूं? मुझे किस टूल्स का उपयोग करने की ज़रूरत है? दृश्य स्टूडियो? मैं एंड्रॉइड स्टूडियो में विकसित हूं।

मुझे लगता है कि मुझे एंड्रॉइड के लिए एक .so फ़ाइल और आईओएस के लिए एक .a फ़ाइल की आवश्यकता है, क्या यह सही है?

उत्तर

5

दोनों प्लेटफॉर्म पर, प्रीकंपिल्ड लाइब्रेरी के साथ-साथ सी ++ स्रोत कोड को सीधे शामिल करना संभव है।

एंड्रॉइड पर, आप Android NDK का उपयोग करना चाहते हैं। यह आपको देशी सी/सी ++ कोड शामिल करने की अनुमति देता है जो जावा पर पुल कर सकता है। जावा और सी/सी ++ के बीच कनेक्शन JNI के साथ प्रबंधित किया जाता है। यह सी ++ और जावा के बीच संचार के लिए एक काफी कठिन, अजीब प्रणाली है। आप Android.mk मेकफ़ाइल सेट अप करना चाहते हैं जो आपके निर्माण में आपकी लाइब्रेरी (या स्रोत कोड) को शामिल करने का तरीका निर्दिष्ट करता है।

आईओएस पर, यह थोड़ा और कसकर जुड़ा हुआ है। आपके पास उद्देश्य-सी ++ फ़ाइलें हो सकती हैं जो सी ++ और ऑब्जेक्टिव-सी कोड दोनों चला सकती हैं। यदि आप स्विफ्ट का उपयोग कर रहे हैं, तो यह थोड़ा अलग है (उद्देश्य-सी ++ और स्विफ्ट के बीच ब्रिजिंग)।

कुछ मामलों में, जब प्लेटफॉर्म (एंड्रॉइड/आईओएस) कार्यक्षमता प्रदान करता है जो सी ++ के साथ संभव या यथार्थवादी है, तो आप अपने आप को कोड को आर्किटेक्ट कर सकते हैं जैसे कि आपका सी ++ आवश्यकतानुसार मंच तक पहुंच सकता है। इसका मतलब है कि आपके पास प्रति प्लेटफॉर्म अलग-अलग कार्यान्वयन फ़ाइलों के साथ शीर्षलेख हो सकते हैं।

  • thing.h
  • thing_android.cpp
  • thing_ios.mm

Android एप्लिकेशन के Android.mk फ़ाइल thing_android.cpp (लेकिन thing_ios.mm नहीं) शामिल होंगे। जब भी आपको एंड्रॉइड एसडीके से कुछ चाहिए तो यह फ़ाइल आवश्यकतानुसार जावा से बात करने के लिए जेएनआई पुल को पार कर सकती है।

आईओएस ऐप में thing_ios.mm शामिल होगा (लेकिन thing_android.cpp नहीं)। .mm एक्सटेंशन उद्देश्य-सी ++ को इंगित करता है, ताकि फ़ाइल आवश्यकतानुसार शक्तिशाली कोको पुस्तकालयों को सीधे कॉल कर सके।

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

+0

व्यापक उत्तर के लिए धन्यवाद। मैंने एनडीके टूलचेन के बारे में पढ़ा। क्या एंड्रॉइड/आईओएस (जो '.so' और '.a'' के लिए संकलित है, या आप क्या सलाह देंगे? – Z0q

+1

मुझे नहीं लगता कि आप क्यों नहीं कर सकते हैं 'Visual Studio 2015 का उपयोग करना संभव है? ऐसा नहीं करते - कुछ कंपनियां जो अपने लाइब्रेरी स्रोत को बंद रखना चाहते हैं, यह एक मानक अभ्यास है। मैं आईओएस ऐप का परीक्षण करने की सुविधा के लिए एक्सकोड का उपयोग करना और उद्देश्य-सी और सी ++ स्रोत दोनों में तेजी से बदलाव करना चाहता था कोड, लेकिन उसी वैन में मैंने सी ++ कोड को सीधे एंड्रॉइड बिल्ड में संकलित किया, जो सामने संकलन के मुद्दों की रिपोर्ट करेगा। – drhr

+1

धन्यवाद। मैं '.so' और' .a' को संकलित कैसे करूं? – Z0q

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