2010-10-23 12 views
8

मैं एक स्थिर पुस्तकालय बनाने की कोशिश कर रहा हूं जिसका उपयोग मैं ios3.x और ios4.x दोनों के साथ कर सकता हूं। मैं ios3.0 के साथ एक स्थिर लाइब्रेरी का निर्माण कर सकता हूं जो ios3.0 में किसी अन्य प्रोजेक्ट के साथ काम करता है लेकिन ios4 में संकलित नहीं होगा। आईओएस 4 से ios3 तक भी यही सच है।सार्वभौमिक आईओएस स्थिर पुस्तकालय कैसे बनाएं

यहाँ कैसे बनाना है: XCode 3.2.4

  1. ओपन और एक कोको टच स्टेटिक लाइब्रेरी Library4
  2. कहा जाता है कि एक नई परियोजना शुरू कक्षाएं फ़ोल्डर पर
  3. क्लिक करें और "TestViewController" नामक एक नया UIViewController बनाने
  4. फ्रेमवर्क फ़ोल्डर पर राइट क्लिक करें, मौजूदा ढांचे को जोड़ें, UIKit
  5. बाएं पैनल में, लक्ष्य का विस्तार करें, मेरे लाइब्रेरी लक्ष्य पर राइट-क्लिक करें और जानकारी प्राप्त करें पर क्लिक करें। सभी कॉन्फ़िगरेशन में बदलें, बेस एसडीके को आईफोन सिम्युलेटर 4.0 में बदलें, ios3.0
  6. पर आईओएस परिनियोजन लक्ष्य बदलें, बिनरी फ़ोल्डर के साथ लिंक लाइब्रेरी पर क्लिक करें। दाएँ फलक में,
  7. लाइब्रेरी
  8. ओपन Xcode 3.2.2 निर्माण और Library4Test
  9. कॉपी TestViewController.h वर्गों के लिए कहा जाता है एक नया दृश्य आधारित अनुप्रयोग शुरू फ़ोल्डर
  10. "कमजोर" करने के लिए दोनों की भूमिकाएं बदल
  11. फ्रेमवर्क फ़ोल्डर में libLibrary4.a फ़ाइल कॉपी करें। यह स्वचालित रूप से लक्ष्य
  12. के लिंकर चरण में जोड़ा जाता है लाइब्रेरी 4Test लक्ष्य पर राइट-क्लिक करें और जानकारी प्राप्त करें पर क्लिक करें। अन्य लिंकर झंडे में, "-ObjC" और "-all_load"
  13. एप्लिकेशन प्रतिनिधि हेडर में आयात "TestViewController.h" जोड़ने
  14. एप्लिकेशन प्रतिनिधि हैडर के आवेदन की didFinishLaunchingWithOptions विधि में जोड़ने

    TestViewController जोड़ें * परीक्षण = [TestViewController alloc] init;

  15. ios3.0 सिम्युलेटर

साथ

संकलित जब मैं संकलन मैं:

Ld build/Debug-iphonesimulator/library4Test.app/library4Test normal i386 
cd /Users/test/Documents/Testing/library4Test 
setenv MACOSX_DEPLOYMENT_TARGET 10.5 
setenv PATH "/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/GrandpaIPhone/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk -L/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -L/Users/test/Documents/Testing/library4Test -F/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -filelist /Users/test/Documents/Testing/library4Test/build/library4Test.build/Debug-iphonesimulator/library4Test.build/Objects-normal/i386/library4Test.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -llibrary4_1 -o /Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator/library4Test.app/library4Test 

Undefined symbols: 
"_objc_msgSendSuper2", referenced from: 
-TestViewController didReceiveMemoryWarning in liblibrary4_1.a(TestViewController.o) 
-TestViewController viewDidUnload in liblibrary4_1.a(TestViewController.o) 
-TestViewController dealloc in liblibrary4_1.a(TestViewController.o) 
"__objc_empty_vtable", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
"_OBJC_CLASS_$_UIViewController", referenced from: 
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
"_OBJC_METACLASS_$_UIViewController", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
".objc_class_name_TestViewController", referenced from: 
[email protected][email protected][email protected] in library4_1os3TestAppDelegate.o 
"_OBJC_METACLASS_$_NSObject", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
+0

लोगों के लिए बस एक स्थिर आईओएस lib बनाने की तलाश में: http://stackoverflow.com/questions/3520977/build-fat-static-library-device-simulator-using-xcode-and-sdk-4 –

उत्तर

2

यकीन है कि ऐसा नहीं है, लेकिन यह एक जोड़ने समस्या (उन सभी चीजें ओ) की तरह दिखता है। यहां बताया गया है कि मैंने अपनी आईओएस स्थिर पुस्तकालय कैसे स्थापित की है। यह एक बहुत ही साधारण बात है, लेकिन यह काम करता है।

    एक नई परियोजना शुरू और आईओएस libarary >> कोको टच स्टेटिक लाइब्रेरी
  1. चुनें कुछ वर्गों जोड़े
  2. । मेरा UIView पर श्रेणियां हैं जो NSLog में उपयोग के लिए बेहतर विवरण देती हैं।
  3. लक्ष्य का चयन करें और सुनिश्चित करें कि प्रत्येक वर्ग की भूमिका उचित मान पर सेट की गई है। मेरी श्रेणियों के मामले में जो 'सार्वजनिक' होना चाहिए।
  4. लक्ष्य पर डबल-क्लिक करें और बिल्ड टैब चुनें।
  5. विन्यास रिलीज का चयन करें और निर्माण निम्नलिखित सेटिंग्स सेट:
  6. तैनाती स्थान हाँ (जांच)
    तैनाती पोस्टप्रोसेसिंग हाँ (जांच)
    स्थापना बिल्ड उत्पाद स्थान/

अपने स्थिर पुस्तकालय का निर्माण करें। डिफ़ॉल्ट रूप से यह/usr/local/lib

में निर्मित होगा अब अपनी नई लाइब्रेरी तक आसान पहुंच के लिए एक प्रतीकात्मक लिंक बनाएं। एक आसान तरीका है निम्न कमांड अपने टर्मिनल खोलने और चलाने के लिए है:

cd ~  
ln -s /usr/local/lib 

अब Xcode प्रोजेक्ट जिसमें आप अपने पुस्तकालय का उपयोग करना चाहते खोलें। पुस्तकालय नामक समूह बनाएं या ऐसा कुछ, ctrl-click और लाइब्रेरी जोड़ने के लिए 'मौजूदा फाइलें जोड़ें' का उपयोग करें। इसे libYourLibrary.a जैसे कुछ कहा जाएगा जब आप अपनी प्रोजेक्ट चलाते हैं, तो आपको एक लिंकिंग त्रुटि मिल जाएगी। तो प्रोजेक्ट फ़ाइल पर डबल-क्लिक करें, बिल्ड >> सभी कॉन्फ़िगरेशन पर जाएं और "लाइब्रेरी सर्च पथ" सेटिंग में निम्न मान जोड़ें: ~/lib

+0

मैं बस एक प्रश्न बनाया है कि आप यहां जवाब दे रहे हैं लेकिन मुझे यकीन नहीं है। यहां यह है: http://stackoverflow.com/q/26597889/1735836 – Patricia

0

क्या आप सिर्फ एसडीके द्वारा एक लक्ष्य बनाते हैं? मैं आईओएस-ओएसएक्स के लिए एक स्थिर पुस्तकालय बनाता हूं और प्रक्रिया बहुत अधिक सरल थी।

  1. परियोजना बनाने (आईओएस टेम्पलेट "कोको स्पर्श स्टेटिक लाइब्रेरी" से)
  2. स्रोत फ़ाइलों
  3. एसडीके के लिए एक लक्ष्य जोड़ने जोड़ने
बेशक

मैं कुछ

जोड़ना होगा
#if TARGET_OS_IPHONE 
... 
#else 
... 
#endif 

कोड के लिए। आप अपनी सशर्त जोड़ सकते हैं।

0

कंपाइलर त्रुटियां हो रही हैं क्योंकि आपने सही सिस्टम ढांचे के खिलाफ लिंक नहीं किया है। गहरे लाल रंग के सभी प्रतीक फाउंडेशन.फ्रेमवर्क, UIKit.framework और libobjc.dylib से हैं।

स्टेटिक लाइब्रेरी स्वचालित रूप से उन आवश्यक ढांचे में नहीं खींचते हैं जिन्हें उन्हें लिंक करने की आवश्यकता होती है, इसलिए जब आप उनका उपयोग करते हैं तो आपको उन्हें परियोजना में स्वयं जोड़ना होगा।

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