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 ./configure
Befehl von PHP weist auf den Ordner iconv /opt/local
, daher wird die Bibliothek macport iconv verwendet (die mit dem +universal
Flag installiert wird ). Bekomme file
ich:
/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 file
ist:
/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.
In meinem Fall
--with-iconv-dir=/usr/lib
war nicht genug, ich denke, diese Option funktioniert nicht. Also habe ich manuell umbenannt/opt/local/lib/libiconv.dylib
zu/opt/local/lib/libiconv.dylib.bak
und nach wieder umbenannt Gebäude.quelle