2012-02-19 12 views
6

Sto lavorando su MacOSX 10.7.2 e Xcode 4.2.1. Ho installato libpng utilizzando la porta e stavo cercando di caricare un'immagine PNG nella mia richiesta, ma ricevo errori del linker:Errore linker con libpng sotto MacOSX

Undefined symbols for architecture x86_64: 
    "_png_create_read_struct", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_create_info_struct", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_destroy_read_struct", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_set_longjmp_fn", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_init_io", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_set_sig_bytes", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_read_png", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_get_IHDR", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_get_rowbytes", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
    "_png_get_rows", referenced from: 
     loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o 
ld: symbol(s) not found for architecture x86_64 

ho incluso png.h nel mio progetto utilizzando

#include "/usr/X11/include/png.h" 

So libpng si basa su zlib, quindi ho incluso -lz in "Altri linker flag" ma non è cambiato nulla.

Qualche suggerimento su come farlo funzionare?

+0

A ipotesi approssimativa: sembra che manchi la versione a 64 bit - hai provato 'file' e' otool' su libpng? –

risposta

5

ho risolto con l'installazione manuale di libpng:

  • scaricare la fonte da official web site
  • in Terminal, andare nella cartella scaricata e lanciare

    cp ./scripts/makefile.darwin makefile 
    make 
    sudo make install 
    make clean 
    
  • se doesn' t lavoro (come nel mio caso) apri makefile con TextEdit (o equivalente) e cambia linea

    ARCH="-arch i386 -arch x86_64"

    in

    ARCH=-arch x86_64

    (supponendo, naturalmente, il sistema è a 64 bit).

Potrebbe non essere sufficiente. Xcode non era ancora in grado di trovare la libreria. Ho risolto utilizzando

cd /usr/local/lib 
sudo ln -s libpng15.dylib ./libpng15.15.dylib 

Questo ha fatto il trucco. Ora funziona bene.

+0

Brillante, grazie! – Arman

+0

Assicurati anche di rimuovere -ppc, che ha funzionato per me! – Roecrew