2015-06-13 98 views
51

我在我的新Swift 2.0項目中使用了一些外部代碼,它需要在早期版本中使用「libz.dylib」。更新到新的XCode /新SDK之後。Swift 2/iOS 9 - 找不到libz.dylib

Xcode是現在無法導入libz.dylib,並引發了一些錯誤

Undefined symbols for architecture i386: "_deflate", referenced from: +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) "_deflateEnd", referenced from: +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) "deflateInit2", referenced from: +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) "_inflate", referenced from: +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) "_inflateEnd", referenced from: +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) "inflateInit2", referenced from: +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

當尋找通過「建階段」的設置,我可以找到「libz.tbd」,這似乎是可用的軟件包替換爲libz.dylib。當導入這個庫鏈接錯誤保持不變,但我得到這個額外的警告:

warning: skipping file '/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/usr/lib/libz.tbd' (unexpected file type 'text' in Frameworks & Libraries build phase)

任何想法該怎麼辦?

+0

嘗試產品清除。如果它沒有幫助。刪除Xcode緩存和派生數據 –

+0

我同意@LeoDabus使用「產品清除」。作爲一個新項目,添加這個tbd(它代表什麼?)會很好地編譯。 – Laurent

+1

我已經清理並重建了孔項目 - 同樣的問題! –

回答

108

我有同樣的問題。我找到了某種方式。

  1. 進入建設階段>鏈接二進制與Librairies> +>添加其它
  2. 一旦在文件選擇窗口中執行 「CMD」 + Shift + G(進入文件夾),然後鍵入/ usr/lib中/
  3. 從/ usr/lib中,你可以添加:libz.dylib更多...
  4. 編譯和樂趣
+37

這已經過時了。它現在應該是libz.tbd。 – bkwebhero

+5

@BK也許應該,仍然不爲我在優山美地和Xcode 7.1.1與.tbd工作 - 用上述溶液做工作,在模擬器和設備上 – dogsgod

+0

它也好像現在你甚至都不需要讓他們在你的Link Binary with Libraries列表中 - 至少在我的情況下,Xcode會自動找到它們。正如在AZ0的答案下面。 – Alex

-2

同時可以使用以前的SDK。這是我libsqlite3答案:

https://stackoverflow.com/a/30981161/627794

編輯:(加鏈接的內容)

打開終端,類型(更改爲需要的庫,例如libz進行)

locate libsqlite3.dylib 

你會發現幾個這樣的文件:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libsqlite3.dylib 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libsqlite3.dylib 

轉到您的項目設置 - >構建階段 - >與二進制文件鏈接。點擊+,然後點擊Add Other,添加兩個文件。點擊Cmd-Shift-G,然後複製粘貼文件路徑。點擊Open

如果您使用macports安裝sqlite3,請從「生成設置」中的「庫搜索路徑」中刪除/opt/local/lib

8

從鏈接的二進制階段中刪除所有動態庫(dylib)。它會自己找到這些庫。

+0

謝謝!它的確如此。對於使用Xcode 7.2的模擬器使用.tbd和iphone設備/歸檔的問題,使用.dylib。所以它抱怨說它找不到缺失的庫。 –

+0

在我的情況下,簡單地刪除這些庫是正確的答案。看起來他們不得不在Xcode的舊版本中,但在我使用的最新版本(8.1)中,它沒有它們。 – Alex

1

libz.dylib是zlib的動態lib中,你可以從這裏安裝的Zlib http://zlib.net/

78

libz.dylib現在下libz.tbd quote from the Apple developer forums發現:

For those who are curious, the .tbd files are new "text-based stub libraries", that provide a much more compact version of the stub libraries for use in the SDK, and help to significantly reduce its download size.

希望更多的文檔會快來了。

編輯

要clearify它,我舉Guitz答案與更新的內容

  1. Go to Build Phases >Link Binary with Librairies > + > Add other
  2. Once in the file selection window do "CMD"+Shift+G (Go to folder) and type /usr/lib/
  3. From /user/lib you can add : libz.tbd and more...
  4. Compile and have fun
+3

這應該是第一個答案! –

+2

這是安全使用較舊的iOS版本嗎?在你提供的鏈接上他們說「刪除對.tbd的所有引用」,那麼,我們應該使用.tbd還是不? – jcesarmobile

0

您可以從位置添加libz.1.dylib:/ usr/lib中/

  1. 前往Build Phase>鏈接二進制文件> +>添加其他
  2. 一旦在文件選擇窗口中執行CMD + Shift + G(進入文件夾),並從/用戶鍵入/ usr/lib目錄/
  3. /lib中,你可以添加:libz.1.dylib

它爲我工作。

2

我在Objective-C project.ios9.1這個問題,xcode7.1

1.Go到目標>構建階段>鏈接二進制與Librairies> +

2.select libz.tbd並添加

它爲我

0

您還可以添加從lybz.dylib「其他鏈接器標記」構建設置中加入t他的論點是-lz

我不得不這麼做,因爲使用從/ usr/lib引用庫的方法,當我將應用程序部署到我們的測試者時,.dylib庫無法解析並導致應用程序在啓動時崩潰。