【发布时间】: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