2015-02-24 65 views
0

我有一個編寫在C上的程序,需要在PHP項目中使用它。我成功使用SWIG並在Ubuntu上編譯SO php擴展。後來我試着使用相同的OS X SO文件 - 但是PHP拋出以下錯誤:如何使用SWIG在OS X上編譯PHP擴展

PHP Error[2]: dl(): Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20121212/extension.so' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20121212/extension.so, 9): no suitable image found.
Did find: /usr/lib/php/extensions/no-debug-non-zts-20121212/extension.so: unknown file type, first eight bytes: 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00

我建議在另一個操作系統造成編譯這個問題,並決定建立在OS X上我SO文件做以下:

swig -php extension.i 
gcc `php-config --includes` -fpic -c extension_wrap.c extension.c 
gcc -shared extension_wrap.o extension.o -o extension.so 

在Ubuntu上這三個命令執行成功,我得到一個SO文件,它正常工作與PHP在Ubuntu(但未能在OS X)。
在OS X上,我從編譯器收到以下異常:

Undefined symbols for architecture x86_64: "__efree", referenced from: _SWIG_Php_GetModule in extension_wrap.o ............................................................................................................................. "_zval_is_true", referenced from: __wrap_swig_extension_alter_newobject in extension_wrap.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

(我已經縮短輸出一點點)。

如果有人可以建議如何在OS X上構建PHP擴展或使用基於Ubuntu的擴展,我將不勝感激。

在此先感謝

回答

1

繼生產共享庫的命令序列可以用PHP在OS X上成功使用(10.10):

swig -php extension.i 
gcc `php-config --includes` -fpic -c extension_wrap.c extension.c 
gcc -bundle -bundle_loader /usr/bin/php -dynamic *.o -o extension.so 

我還是不明白,這個解決方案是如何工作的,但至少它是有效的。