Compilando o PHP no OS X: iconv funciona somente se for forçado para 64 bits

5

Estou tentando compilar o PHP e continuei recebendo este erro durante 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

O comando ./configure do PHP tem a pasta iconv apontando para /opt/local , então a biblioteca macport iconv é usada (que é instalada usando o +universal flag). Fazendo file eu recebo:

/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

Eu tentei instalar a biblioteca iconv manualmente, forçando apenas a arquitetura de 64 bits (eu instalei em /usr/local ) e ela funciona. A saída de file é:

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

Por que isso está acontecendo? Eu consigo construir e fazer o PHP funcionar com a instalação manual, mas não entendo.

    
por entropid 26.02.2012 / 04:38

2 respostas

5

A biblioteca iconv do MacPorts renomeia os símbolos para _libiconv_open e _libiconv_close . É por isso que o PHP não conseguiu encontrá-los, não por causa do forçado de 64 bits. Execute nm /opt/local/lib/libiconv.dylib vs nm /usr/lib/libiconv.dylib (em 10.7.3).

    
por 26.02.2012 / 19:14
0

No meu caso --with-iconv-dir=/usr/lib não foi suficiente, acho que esta opção não funciona. Então, renomei manualmente /opt/local/lib/libiconv.dylib para /opt/local/lib/libiconv.dylib.bak e depois de criar renomeado de volta.

    
por 12.07.2013 / 16:38