Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

error when import zlib in iOS: symbol(s) not found collect2: ld

Tags:

ios

zlib

linker

I have included <zlib.h> in my iphone application and the source code I was mocking up the sample code of Molecules provided by Brad Larson, however, when I build the project, it returns the error as below. Can anyone point out for me whether this is a library linking problem or am I missing something else?

"_deflate", referenced from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o "_inflateEnd",  referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "inflateInit2",  referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "_inflate",  referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "_deflateEnd",  referenced from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o "deflateInit2", referenced  from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o ld: symbol(s) not found collect2: ld  returned 1 exit status 
like image 705
issac Avatar asked Nov 14 '08 04:11

issac


2 Answers

In your Target's Build Settings tab, scroll down to the Other Linker Flags section and make sure -lz is in the field. This will link against the built-in zlib, and your error should go away.

After changing the Linker Flags you must select Clean from the Product menu before building again.

lz screenshot

like image 160
Ben Gottlieb Avatar answered Oct 08 '22 19:10

Ben Gottlieb


Add libz to your project. To do this, follow these steps in Xcode:

  1. Open your project, select your project target and then click the blue project info icon on your toolbar (or press ⌘I)
    Example 1
  2. Click the + button in the lower-left corner of the screen to add a library, scroll down to the bottom of the library list and select libz.dylib; click the Add button.
    Example 2
  3. Once you've clicked add, you will see that the library name appears in oyur list of Linked Libraries. You will now be able to build your project without linking errors.
    Example 3

You can use this same method to add any library from the list. If the library does not appear on the list, then you know that it is not part of the standard iPhone SDK and you may need to rethink your solution or build the library statically yourself and link your target to that (if even possible).

like image 36
Jason Coco Avatar answered Oct 08 '22 19:10

Jason Coco