为什么我得到这个铛错误:_fwrite $ UNIX2003模拟器与iOS 8

我已经将新的iOS 8下载到我的手机和最新的Xcode到我的Mac上。 这一切工作正常,但加载后,尝试新的iPhone 6加模拟器,当我尝试iPhone 4s或5模拟器(它与5s),我得到以下错误:

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) 

对我来说,我似乎很奇怪,我一直在使用iPhone 4模拟器,但它只是在我尝试了iPhone 6加模拟器,它打破了,我不能得到它的使用

在这个链接提供的答案对我来说工作得很好。

根据上面的链接,为了消除所有这些错误,你必须创build一个* .c文件(不需要一个特定的名称),并复制粘贴下面的代码:

 #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); } 

通常一切都应该没问题。

fwrite $ UNIX2003是OS X提供的一个符号,不是iOS Simulator运行时的一部分。 iOS 始终保持一致,因此不具有传统(非$ UNIX2003)函数变体(提供与针对较早版本的OS X SDK构build的代码的二进制兼容性)。

你所看到的问题的常见原因是你有一个目标文件或档案(env_posix.o或一个包含env_posix.o的libsomething.a),它是针对OS X SDK构build的,并试图将它链接到你的iOS模拟器可执行文件 这不被支持,因为这两个平台在该层不是二进制兼容的。

您需要重build对iOS模拟器SDK的env_posix.o。