PHP扩展安装出错

undefined symbol: core_globals

报错信息:

PHP Warning:  PHP Startup: Unable to load dynamic library '/path/XXX.so' - /path/XXX.so: undefined symbol: core_globals in Unknown on line 0

由于业务需要,开发了一个php扩展。但是在服务器上配置完成之后报错了,出现了以上信息。

undefined symbol: core_globals像是这个符号没有被定义过,于是全局搜索了一下这个符号,发现这个符号只有在php非线程安全的环境才会被定义,线程安全的环境中,定义的是core_globals_id.

因此,扩展也必须在线程安全的环境去构建

如何指定php为线程安全还是线程非安全?

php源码在编译的时候,可以指定 enable-maintainer-zts

php扩展在./configure的时候,会直接取php编译时的配置,无须指定。

如何判断PHP是线程安全还是非线程安全的?

PHP编译成功或者安装成功,会有对应的编译产出物,php或者libphp5.so等,使用一下命令:

objdump -T libphp5.so | grep core_globals

如果可以找到这个符号,那么说明是非线程安全的。
如果显示的core_globals_id,那么说明是线程安全的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 11,779评论 3 64
  • ##第一节:环境搭建 编译安装的关键点:配置编译安装环境,build-essential环境。 1.1 准备编译环...
    你很闹i阅读 3,663评论 1 2
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,370评论 0 27
  • 白岩松真的是一位很有学识的和思想的媒体人。他不是要给你灌输什么,而是在碰撞中把问号留在你心里,让你在以后的日子里去...
    张中政Mr阅读 4,312评论 0 1
  • 原文:记住,如果我们想改变自己的行为,就必须要把我们的旧行为和痛苦连在一起,而把所希望的新行为和快乐连在一起。否...
    赵帮梅阅读 1,534评论 3 0