iOS:Xcode的beta下編譯低版本項目時,出現的Link錯誤( "_fwrite$UNIX2003", referenced from:)

開發的項目多了,對於一個i386的錯誤,處理起來應該是駕輕就熟的,但是仔細看來,跟以前遇到i386的錯誤還不大同樣,直接搜i386是搜不到該問題解決的方法,你要是搜「Undefined symbols for architecture i386」會搜出一些答案,但也不是不少,而且能不能解決當前遇到的問題,還得本身試事後才知道行仍是不行。這裏我就給你們說一下我當時搜到的一些解決方法:html

    一、缺乏類庫,本身項目缺不缺乏類庫本身仍是知道的,看上面的錯誤也像是缺乏類庫,因此這個答案直接拋 棄掉
    二、這個就須要本身動手操做一下,這裏我就簡單說下步驟,截圖嘛,最後也沒有幫我解決問題,因此複述下步驟,有空的時候能夠試下:點擊Xcode左欄項目工程:Target—>Build Settings—>Apple LLVM 6.0 - language - c++到此,修改c++ Standard Library 屬性爲 libstdc++(GNU C++ standard library)
 
以上兩中方法都沒能真正的解決問題,難道這個問題就沒有解決辦法了,別急,下面就是解決問題的方法了
出現的錯誤截圖:
解決辦法:
首先在AppDelegate.h文件中添加以下代碼:
#ifdef DEBUG
    FILE *fopen$UNIX2003(const char *filename, const char *mode);
    size_t fwrite$UNIX2003(const void *ptr, size_t size, size_t nitems, FILE *stream);
#endif

再在AppDelegate.m文件中添加以下代碼:c++

#ifdef DEBUG
    FILE *fopen$UNIX2003(const char *filename, const char *mode) {
        return fopen(filename, mode);
    }
    size_t fwrite$UNIX2003(const void *ptr, size_t size, size_t nitems, FILE *stream) {
        return fwrite(ptr, size, nitems, stream);
    }
#endif
 
或者:
首先在AppDelegate.h文件中添加以下代碼:
#if defined (__unix) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#ifndef __ENABLE_COMPATIBILITY_WITH_UNIX_2003__
#define __ENABLE_COMPATIBILITY_WITH_UNIX_2003__
FILE *fopen$UNIX2003(const char *filename, const char *mode);
size_t fwrite$UNIX2003(const void *ptr, size_t size, size_t nitems, FILE *stream);
#endif
#endif

再在AppDelegate.m文件中添加以下代碼:ui

#if defined (__unix) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#ifndef __ENABLE_COMPATIBILITY_WITH_UNIX_2003__
#define __ENABLE_COMPATIBILITY_WITH_UNIX_2003__
FILE *fopen$UNIX2003(const char *filename, const char *mode) {
    return fopen(filename, mode);
}
size_t fwrite$UNIX2003(const void *ptr, size_t size, size_t nitems, FILE *stream) {
    return fwrite(ptr, size, nitems, stream);
}
#endif
#endif
在指定的類中添加以上代碼,問題就解決了。
這多是Xcode的一個bug,升級到正式版,可能就不存在這個問題。
相關文章
相關標籤/搜索