2014-09-22 12 views
7

के साथ सिम्युलेटर पर $ UNIX2003 को लिखना: मैंने अपने मैक पर अपने फोन और नवीनतम एक्सकोड दोनों में नया आईओएस 8 डाउनलोड किया है। यह सब ठीक काम करता है, लेकिन लोड और जब मैं iPhone 4s या 5 सिमुलेटर की कोशिश नए iPhone 6 प्लस सिम्युलेटर कोशिश कर के बाद (यह 5s साथ काम करता है) मैं निम्नलिखित त्रुटि मिलती है:मुझे यह क्लैंग त्रुटि क्यों मिल रही है: आईओएस 8

Undefined symbols for architecture i386: 
    "_fwrite$UNIX2003", referenced from: 
     leveldb::(anonymous namespace)::PosixEnv::~PosixEnv() in Firebase(env_posix.o) 
     leveldb::(anonymous namespace)::PosixEnv::~PosixEnv() in Firebase(env_posix.o) 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

यह मेरे लिए बहुत अजीब लगता है कि मैं पूरी तरह से आईफोन 4 सिम्युलेटर का उपयोग कर रहा हूं लेकिन यह केवल आईफोन 6 प्लस सिम्युलेटर का प्रयास करने के बाद है, यह टूट जाता है और मैं इसका उपयोग वापस नहीं कर सकता

+0

संभावित डुप्लिकेट [fopen $ UNIX2003 बाहरी पुस्तकालय के अंदर विफल रहता है] (http://stackoverflow.com/questions/15856848/fopenunix2003-fails-inside-external-library) –

+0

यद्यपि आपने एक डुप्लिकेट उत्तर पोस्ट किया है, प्रश्न निश्चित रूप से है एक डुप्लिकेट नहीं है - कोई आईओएस 8 और सिम्युलेटर के संबंध में इस त्रुटि का जिक्र करता है, दूसरा बाहरी स्थैतिक पुस्तकालय –

+0

का उपयोग करने का जिक्र करता है प्रश्न स्पष्ट रूप से एक डुप्लिकेट है। दोनों ओएस एक्स एसडीके के खिलाफ संकलित एक स्थिर संग्रह का उपयोग कर आईओएस 8 सिम्युलेटर एसडीके के खिलाफ एक सिम्युलेटर ऐप को जोड़ने वाली त्रुटियों को जोड़ने के बारे में हैं। –

उत्तर

12

this link में दिए गए उत्तर मेरे लिए ठीक काम किया।

ऊपर के लिंक के अनुसार, इन त्रुटि के सभी आप एक * ग फ़ाइल बनाने के लिए निकालने के लिए bellow कोड (एक विशिष्ट नाम की जरूरत नहीं है) और कॉपी पेस्ट में:

#include <stdio.h> 
#include <unistd.h> 
#include <string.h> 
#include <stdlib.h> 

FILE *fopen$UNIX2003(const char *filename, const char *mode) 
{ 
    return fopen(filename, mode); 
} 

int fputs$UNIX2003(const char *res1, FILE *res2){ 
    return fputs(res1,res2); 
} 

int nanosleep$UNIX2003(int val){ 
    return usleep(val); 
} 

char* strerror$UNIX2003(int errornum){ 
    return strerror(errornum); 
} 

double strtod$UNIX2003(const char *nptr, char **endptr){ 
    return strtod(nptr, endptr); 
} 

size_t fwrite$UNIX2003(const void *a, size_t b, size_t c, FILE *d) 
{ 
    return fwrite(a, b, c, d); 
} 

आम तौर पर सबकुछ ठीक होना चाहिए।

5

fwrite $ UNIX2003 एक प्रतीक है जो ओएस द्वारा प्रदान किया गया है एक्स और आईओएस सिम्युलेटर रनटाइम का हिस्सा नहीं है। आईओएस हमेशा अनुरूप है और इस प्रकार विरासत (गैर $ UNIX2003) कार्यों के रूप नहीं हैं (जो ओएस एक्स एसडीके के पुराने संस्करणों के खिलाफ बनाए गए कोड के साथ बाइनरी संगतता के लिए प्रदान किए जाते हैं)।

आपके द्वारा देखे जा रहे मुद्दे का सामान्य कारण यह है कि आपके पास ऑब्जेक्ट फ़ाइल या संग्रह है (env_posix.o या libsomething.a जिसमें env_posix.o शामिल है) जो ओएस एक्स एसडीके के खिलाफ बनाया गया था और लिंक करने का प्रयास कर रहा है यह आपके आईओएस सिम्युलेटर निष्पादन योग्य में है। यह समर्थित नहीं है क्योंकि दो प्लेटफॉर्म उस परत पर बाइनरी संगत नहीं हैं।

आपको आईओएस सिम्युलेटर एसडीके के खिलाफ env_posix.o को पुनर्निर्माण करने की आवश्यकता है।

+0

कृपया मुझे बताएं कि libsomething.a –

+0

@hardikvyas को पुनर्निर्माण कैसे करें आपको उचित कोड के खिलाफ अपने कोड को पुनर्निर्माण करने की आवश्यकता है। मैं आपको इससे अधिक विशिष्ट निर्देश नहीं दे सकता क्योंकि यह आपके विशेष मामले पर निर्भर करेगा। –

+0

Thanx मैं कोशिश करूँगा –

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