Kompilieren von PHP unter OS X: iconv funktioniert nur, wenn es auf 64-Bit erzwungen wird

5

Ich versuche PHP zu kompilieren und habe diesen Fehler immer wieder erhalten während make:

Undefined symbols for architecture x86_64:
  "_iconv_open", referenced from:
      __php_iconv_mime_decode in iconv.o
      __php_iconv_strlen in iconv.o
      _php_iconv_string in iconv.o
      __php_iconv_strpos in iconv.o
      _zif_iconv_substr in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _php_iconv_stream_filter_factory_create in iconv.o
      ...
  "_iconv_close", referenced from:
      __php_iconv_mime_decode in iconv.o
      __php_iconv_strlen in iconv.o
      _php_iconv_string in iconv.o
      __php_iconv_strpos in iconv.o
      _zif_iconv_substr in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _php_iconv_stream_filter_dtor in iconv.o
      ...
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

Der ./configureBefehl von PHP weist auf den Ordner iconv /opt/local, daher wird die Bibliothek macport iconv verwendet (die mit dem +universalFlag installiert wird ). Bekomme fileich:

/opt/local/lib/libiconv.dylib: Mach-O universal binary with 2 architectures
/opt/local/lib/libiconv.dylib (for architecture i386):  Mach-O dynamically linked shared library i386
/opt/local/lib/libiconv.dylib (for architecture x86_64):    Mach-O 64-bit dynamically linked shared library x86_64

Ich habe dann versucht, die iconv-Bibliothek manuell zu installieren. Dabei wurde nur die 64-Bit-Architektur erzwungen (ich habe sie installiert /usr/local), und es funktioniert. Die Ausgabe von fileist:

/usr/local/lib/libiconv.dylib: Mach-O 64-bit dynamically linked shared library x86_64

Warum passiert dies? Ich schaffe es, PHP mit der manuellen Installation zu erstellen und zum Laufen zu bringen, aber ich verstehe es nicht.

entropid
quelle

Antworten:

5

Die MacPorts-Symbolbibliothek benennt die Symbole in _libiconv_openund um _libiconv_close. Deshalb konnte PHP sie nicht finden, nicht wegen der erzwungenen 64-Bit-Version. Run nm /opt/local/lib/libiconv.dylibvs nm /usr/lib/libiconv.dylib(in 10.7.3).

Fideli
quelle
Danke, ich konnte es zum Laufen bringen, indem ich PHP mit --with-iconv-dir = / usr / lib
simianarmy am
0

In meinem Fall --with-iconv-dir=/usr/libwar nicht genug, ich denke, diese Option funktioniert nicht. Also habe ich manuell umbenannt /opt/local/lib/libiconv.dylibzu /opt/local/lib/libiconv.dylib.bakund nach wieder umbenannt Gebäude.

MingalevME
quelle