PHP-CPP 扩展,无法初始化模块,因为模块和 PHP 使用不同的 API 版本

问题描述 投票:0回答:1

我正在尝试在 XAMPP 服务器上运行我的 PHP 项目,并且我正在使用用 C++ 编写的 PHP 扩展,使用 PHP-CPP 库。

这是我运行时遇到的错误

/opt/lampp/bin/php -m

PHP Warning:  PHP Startup: module_nametwo: Unable to initialize module
Module compiled with module API=20210902
PHP    compiled with module API=20220829

我的系统PHP版本=> 8.2.15

XAMPP PHP 版本 => 8.2.12

我的系统版本 => 2.4.52

XAMPP Apache Apache 版本 => 2.4.58

当我尝试检查系统上的 php 时:

$ sudo update-alternatives --display php
php - auto mode
  link best version is /usr/bin/php8.3
  link currently points to /usr/bin/php8.3
  link php is /usr/bin/php
  slave php.1.gz is /usr/share/man/man1/php.1.gz
/usr/bin/php8.1 - priority 81
  slave php.1.gz: /usr/share/man/man1/php8.1.1.gz
/usr/bin/php8.2 - priority 82
  slave php.1.gz: /usr/share/man/man1/php8.2.1.gz
/usr/bin/php8.3 - priority 83
  slave php.1.gz: /usr/share/man/man1/php8.3.1.gz

这是我的 Makefile 的一部分:

NAME                =   module_nametwo

INI_DIR                =   /etc/php/8.2/mods-available/


EXTENSION_DIR       =   $(shell /opt/lampp/bin/php-config --extension-dir)


EXTENSION           =   ${NAME}.so
INI                 =   ${NAME}.ini


all:                    ${OBJECTS} ${EXTENSION}


${EXTENSION}:           ${OBJECTS}
                       ${LINKER} ${LINKER_FLAGS} -o $@ ${OBJECTS} ${LINKER_DEPENDENCIES}


${OBJECTS}:
                       ${COMPILER} ${COMPILER_FLAGS} $@ ${@:%.o=%.cpp}


install:        
                       ${CP} ${EXTENSION} ${EXTENSION_DIR}
                       ${CP} ${INI} ${INI_DIR}
               
clean:
                       ${RM} ${EXTENSION} ${OBJECTS}
php c++ linux apache php-extension
1个回答
0
投票

API 版本 20200903 是 PHP 8.1。 API 版本 20220829 是 PHP 8.2。

您的问题是由于使用一种版本的 PHP 并加载为不同版本编译的 PHP 扩展而引起的。

module_nametwo 是为 PHP 8.1 编译的。将模块更新到 PHP 8.2 兼容版本或降级/切换到 PHP 8.1。

您在问题中显示了 Makefile。但是,仅此并不能指定您用于包含、库等的 PHP 开发包。PHP 开发包必须与您正在编译并运行模块(扩展)的 PHP 版本相匹配。

© www.soinside.com 2019 - 2024. All rights reserved.