我有一個編寫在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的擴展,我將不勝感激。
在此先感謝