2012-02-19 12 views
6

Pracuję na MacOSX 10.7.2 i Xcode 4.2.1. Zainstalowałem libpng za pomocą portu i starałem się załadować obrazu PNG w mojej aplikacji, ale pojawiają się błędy linkera:Błąd łącznika z libpng pod MacOSXem

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 

włączyłem png.h w moim projekcie używając

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

wiem libpng opiera się na zlib, w ten sposób dodałem -lz w "Inne znaczniki linkera", ale nic się nie zmieniło.

Wszelkie sugestie, jak sprawić, aby działało?

+0

W przybliżeniu: wygląda na brak wersji 64-bitowej - czy próbowałeś 'file' i' otool' na libpng? –

Odpowiedz

5

Rozwiązałem z ręczną instalacją libpng:

  • pobrać źródła z official web site
  • w terminalu, przejdź do pobranego folderu i uruchom

    cp ./scripts/makefile.darwin makefile 
    make 
    sudo make install 
    make clean 
    
  • jeśli nie robi” t działa (jak w moim przypadku) otwórz makefile z TextEdit (lub odpowiednikiem) i zmień wiersz

    ARCH="-arch i386 -arch x86_64"

    w

    ARCH=-arch x86_64

    (zakładając oczywiście, system jest 64-bitowy).

To może nie wystarczyć. Xcode nadal nie mógł znaleźć biblioteki. Rozwiązałem ten problem, korzystając z

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

To wystarczyło. Teraz działa dobrze.

+0

Świetne, dziękuję! – Arman

+0

Pamiętaj również o usunięciu -ppc, które zadziałało dla mnie! – Roecrew

Powiązane problemy