इस पोस्ट में, मैं CMake और osxcross का उपयोग करके Ubuntu बिल्ड मशीन पर macOS के लिए क्रॉस-प्लेटफ़ॉर्म C++ एप्लिकेशन बनाने का वर्णन करूंगा।
सबसे पहले, osxcross टूलचेन स्थापित करें:
https://github.com/tpoechtrager/osxcross
स्थापना 3 चरणों में होती है, डाउनलोडिंग निर्भरताएँ:
cd tools
./get_dependencies.sh
आधिकारिक Apple वेबसाइट से XCode.xip डाउनलोड करें, फिर XCode से SDK डाउनलोड करें:
./gen_sdk_package_pbzx.sh /media/demensdeum/2CE62A79E62A4404/LinuxSupportStorage/xcode111.xip
मुझे आशा है कि आपने अंतिम चरण में XCode लाइसेंस अनुबंध पढ़ा होगा? इसके बाद, आवश्यक उपसर्ग के साथ टूलचेन बनाएं:
INSTALLPREFIX=/home/demensdeum/Apps/osxcross ./build.sh
अब आप पिछले चरण की उपसर्ग निर्देशिका से osxcross का उपयोग कर सकते हैं। आइए CMake के लिए एक नया बिल्ड मैक्रो जोड़ें और सभी आवश्यक चीज़ें लिखें:
if (OSXCROSS)
SET(CMAKE_SYSTEM_NAME Darwin)
SET(CMAKE_C_COMPILER o64-clang)
SET(CMAKE_CXX_COMPILER o64-clang++)
SET(CMAKE_C_COMPILER_AR x86_64-apple-darwin19-ar)
SET(CMAKE_CXX_COMPILER_AR x86_64-apple-darwin19-ar)
SET(CMAKE_LINKER x86_64-apple-darwin19-ld)
SET(ENV{OSXCROSS_MP_INC} 1)
endif()
डायनामिक लिंकिंग मेरे लिए सफल नहीं रही, इसलिए हम पुस्तकालयों को स्थिर रूप से निर्यात करते हैं:
if (OSXCROSS)
add_library(FlameSteelCore STATIC ${SOURCE_FILES})
else()
इसके बाद, आपको इस तथ्य का सामना करना पड़ सकता है कि आपके पास osxcross के लिए आवश्यक लाइब्रेरी नहीं है, SDL2 का उपयोग करते समय मुझे इसका सामना करना पड़ा। osxcross तैयार लाइब्रेरी पैकेजों का समर्थन करता है – मैकपोर्ट्स। उदाहरण के लिए, SDL2-मिक्सर स्थापित करना:
osxcross-macports -v install libsdl2_mixer
इसके बाद, आप हमेशा की तरह सेमेक-मेक लिंक में लाइब्रेरी/एप्लिकेशन बनाना शुरू कर सकते हैं, यदि आवश्यक हो तो लाइब्रेरी की स्टैटिक लिंकिंग निर्दिष्ट करना न भूलें।
पुस्तकालयों की मैन्युअल असेंबली
वर्तमान में, मुझे स्थैतिक लिंकिंग के दौरान पुस्तकालयों के गलत संग्रह की समस्या का सामना करना पड़ा है; अंतिम एप्लिकेशन बनाते समय मुझे त्रुटि प्राप्त होती है:
file was built for archive which is not the architecture being linked (x86_64)
इस टिकट के समान, हम एक वर्कअराउंड लागू करने में कामयाब रहे जिसके परिणामस्वरूप बिल्ड सही ढंग से पूरा हुआ। आइए स्टैटिक लाइब्रेरी को अनज़िप करें और ओएसएक्सक्रॉस आर्काइवर का उपयोग करके इसे नए सिरे से बनाएं:
ar x ../libFlameSteelCore.a
rm ../libFlameSteelCore.a
x86_64-apple-darwin19-ar rcs ../libFlameSteelCore.a *.o
इसके अलावा, जिन समस्याओं पर मैं व्यक्तिगत रूप से विचार करता हूं उनमें से एक सीधे उबंटू पर मैकओएस अनुप्रयोगों को चलाने की क्षमता की कमी है (कम से कम कार्यक्षमता के हिस्से के साथ)। बेशक, एक परियोजना है darling, लेकिन समर्थन अभी भी वांछित होने के लिए बहुत कुछ बाकी है।
Leave a Reply