c-如何使用SWIG在OSX上编译PHP扩展


c - How to compile PHP extension on OS X using SWIG

我有一个用C编写的程序,需要在PHP项目中使用它。我成功地在Ubuntu上使用了SWIG并编译了SO php扩展。之后,我尝试在OSX上使用相同的SO文件,但php抛出以下错误:

PHP错误[2]:dl():无法加载动态库"/usr/lib/PHP/extensions/no-debug-non-zts-20121212/extension.so"-dlopen(/usr/lib/PHP/extensions/no-debug-non-zts/20121212/extension.so,9):找不到合适的映像
确实找到:/usr/lib/php/extensions/no-debug-non-zts-20121212/extension.so:未知文件类型,前八个字节: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文件,它在Ubuntu上与PHP配合良好(但在OSX上失败)
在OSX上,我从编译器得到以下异常:

体系结构x86_64的未定义符号:"__efree",引用自:_SWIG_Php_GetModule在extension_wrap.o中。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。"_zval_is_true",引用自:__wrappe_swig_extension_alter_newobject在extension_wrap.o中ld:找不到体系结构x86_64的符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

(我把输出缩短了一点)。

如果有人能建议如何在OSX上构建PHP扩展或使用在Ubuntu上构建的扩展,我将不胜感激。

提前感谢

下面的命令序列产生了共享库,可以在OS X(10.10)上成功地与PHP一起使用:

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

我仍然不明白这个解决方案是如何工作的,但至少它是工作的。