Ошибка компоновщика с libpng под MacOSX - PullRequest
6 голосов
/ 19 февраля 2012

Я работаю на MacOSX 10.7.2 и Xcode 4.2.1.Я установил libpng, используя порт, и пытался загрузить изображение PNG в свое приложение, но я получаю ошибки компоновщика:

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

Я включил png.h в свой проект, используя

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

Я знаю, libpng основан на zlib, поэтому я включил -lz в "Другие флаги компоновщика", но ничего не изменилось.

Есть предложения о том, как заставить это работать?

1 Ответ

5 голосов
/ 20 февраля 2012

Я решил при ручной установке libpng:

  • загрузить исходный код с официального сайта
  • в Терминал, зайти вскачанную папку и запустите

    cp ./scripts/makefile.darwin makefile
    make 
    sudo make install
    make clean
    
  • , если она не работает (как в моем случае), откройте makefile с помощью TextEdit (или эквивалентного) и измените строку

    ARCH="-arch i386 -arch x86_64"

    in

    ARCH=-arch x86_64

    (при условии, конечно, что ваша система 64-битная).

Возможно, этого недостаточно.Xcode все еще не смог найти библиотеку.Я решил использовать

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

Это добилось цели.Теперь работает нормально.

...