【问题标题】:How to compile PHP extension on OS X using SWIG如何使用 SWIG 在 OS X 上编译 PHP 扩展
【发布时间】:2015-02-24 15:17:03
【问题描述】:

我有一个用 C 语言编写的程序,需要在 PHP 项目中使用它。我成功在 Ubuntu 上使用 SWIG 并编译了 SO php 扩展。之后我尝试在 OS X 上使用相同的 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 一起正常工作(但在 OS X 上失败)。
在 OS X 上,我从编译器收到以下异常:

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

(我稍微缩短了输出)。

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

提前致谢

【问题讨论】:

    标签: php c macos shared-libraries swig


    【解决方案1】:

    以下命令生成的共享库可以在 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2013-01-24
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多