I'm working on a project with a number of developers over Git and the existing codebase uses PECL YAML PHP extension (v1.0.1).
I have tried a number of steps to install the PECL YAML extension on my MAMP server and to no joy!
I am assuming the other developers are on Linux.
First couple of attempts at install revealed this error in my php_error_log:
"[16-Jul-2011 11:29:13] PHP Warning: PHP Startup: Unable to load dynamic library '/Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/yaml.so' - dlopen(/Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/yaml.so, 9): no suitable image found. Did find: /Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/yaml.so: mach-o, but wrong architecture in Unknown on line 0"
After a large amount of time googling I realised that I wasn't alone and it's because my extension that I compiled using "./pecl i yaml" was a 64 bit version
"file yaml.so": yaml.so: Mach-O 64-bit bundle x86_64
However, comparing this to working extensions on my MAMP setup i.e. "file xdebug.so":
xdebug.so: Mach-O universal binary with 2 architectures
xdebug.so (for architecture ppc): Mach-O bundle ppc
xdebug.so (for architecture i386): Mach-O bundle i386
So I discovered a number of blogs that helped me to identify the exact problem.
Can't run 64 bit extensions on 32 bit MAMP server - makes sense.
My install process is:
run .configure using a command from blogs:
"CFLAGS='-O3 -fno-common -arch i386 -arch x86_64 -g -Os' LDFLAGS='-O3 -arch i386 -arch x86_64′ CXXFLAGS='-O3 -fno-common -arch i386 -arch x86_64 -g -Os' ./configure –-disable-dependancy-tracking –-disable-shared -enable-static"
make
"sudo cp modules/yaml.so /Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/."
The above solution seems to have worked for everyone but me.
My error log now reports this:
[16-Jul-2011 11:09:25] PHP Warning: PHP Startup: Invalid library (maybe not a PHP library) 'yaml.so' in Unknown on line 0
I've spent a good couple of hours on this now and need your help.
All I'm actually trying to do is parse YAML in PHP.
I have 2 options:
Fix it and breath a sign of relief
Use a PHP YAML parsing class instead and avoid this extension in the future
The issue with option 2 is that the codebase will change due to my inability to install an extension.
Any advice or a solution would be greatly appreciated.
Cheers
If you have Homebrew installed then you can do:
brew install libyaml --universal
Otherwise install the latest libyaml.
You can build for both 32 & 64 bit Intel by setting CFFLAGS
and LDFLAGS
to -arch i386 -arch x86_64
.
Then, install PEAR/PECL (you can also follow the instructions here)
wget http://pear.php.net/go-pear.phar
sudo php -d detect_unicode=0 go-pear.phar
By default it'll install in ~/pear/
directory. Now run
sudo ~/pear/bin/pecl install yaml
Then, take care of the so file.
This nice article will demonstrate how you can install MAMP stack manually.