Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

I am setting up PHP on my local web server with iconv, which should be there by default, but I am getting the following error:

Undefined symbols for architecture x86_64:
  "_iconv", referenced from:
      __php_iconv_strlen in iconv.o
      _php_iconv_string in iconv.o
      __php_iconv_strpos in iconv.o
      __php_iconv_appendl in iconv.o
      _zif_iconv_substr in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _php_iconv_stream_filter_append_bucket in iconv.o
      ...
     (maybe you meant: _zif_iconv_strlen, _zif_iconv_strpos , _zif_iconv_mime_decode , _php_iconv_string , _zif_iconv_set_encoding , _zif_iconv_get_encoding , _zif_iconv_mime_decode_headers , _iconv_functions , _zif_iconv_mime_encode , _zif_iconv_strrpos , _iconv_module_entry , _iconv_globals , _zif_iconv_substr , _php_if_iconv , _zif_ob_iconv_handler )
ld: symbol(s) not found for architecture x86_64

Now, presumably this means that my iconv is not 64 bit. I tried to download libiconv and manually reinstall it with 64 bit, as such:

CFLAGS='-arch i386 -arch ppc -arch ppc64 -arch x86_64' CCFLAGS='-arch i386 -arch ppc -arch ppc64 -arch x86_64' CXXFLAGS='-arch i386 -arch ppc -arch ppc64 -arch x86_64' ./configure

But I get the following error:

configure: error: in `/Users/jason/Downloads/libiconv-1.13.1':
configure: error: C compiler cannot create executables
See `config.log' for more details.

In my config.lob file, it says at the bottom:

configure: exit 77

Any suggestions?

share|improve this question

closed as off-topic by devicenull, Ward, warren, RolandoMySQLDBA, Katherine Villyard Apr 6 at 15:26

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions must be relevant to professional system administration. Server Fault is dedicated to professional system and network administrators. End user and enthusiast questions are off-topic (contact your system administrator or hire a professional to help you out). Please see the Help Center for more information." – devicenull, Ward, warren, RolandoMySQLDBA, Katherine Villyard
If this question can be reworded to fit the rules in the help center, please edit the question.

    
Actually libiconv should be 64 bit if you are using the system one. You can check with file /usr/lib/libiconv.dylib –  dog Apr 8 '11 at 22:07
    
Thanks - the output is: /usr/lib/libiconv.dylib: Mach-O universal binary with 3 architectures /usr/lib/libiconv.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 /usr/lib/libiconv.dylib (for architecture i386): Mach-O dynamically linked shared library i386 /usr/lib/libiconv.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc –  Jason Apr 8 '11 at 22:28
    
This looks like I actually do have 64-bit iconv –  Jason Apr 8 '11 at 22:29
    
However, I'm still getting this error... –  Jason Apr 8 '11 at 22:38
    
looks like your library is compiled as a fat binary (i386 and x86_64) there is a way you can tell it to be only - look at com.apple.versioner and if possible configure it only for the arch you need. –  silviud Apr 9 '11 at 0:36

1 Answer 1

I've had exactly the same problem on OS X 10.7, i.e. couldn't compile PHP due to the libiconv x86_64 errors, but have solved it as follows:

Build an x86_64-only version of libiconv:

CFLAGS='-arch x86_64' CCFLAGS='-arch x86_64' CXXFLAGS='-arch x86_64' ./configure
make
sudo make install

This will put the compiled files in /usr/local/lib

Then run ./configure in the PHP source directory, then 'make'

When you get the error with iconv, copy the last gcc command (the one that failed), change the start to:

gcc -bundle -bundle_loader /usr/sbin/httpd -L/usr/local/lib

so it's pointing to the 64-bit-only version. Then paste the new command and run 'make' again and it works (at least did for me).

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.