mac os编译php7.0.33报错sys_icache_invalidate咋解决啊?

/bin/sh /Users/zc/Desktop/php-7.0.33/libtool --silent --preserve-dup-deps --mode=compile cc -DHAVE_CONFIG_H -I/Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -Iext/pcre/ -I/Users/zc/Desktop/php-7.0.33/ext/pcre/ -DPHP_ATOM_INC -I/Users/zc/Desktop/php-7.0.33/include -I/Users/zc/Desktop/php-7.0.33/main -I/Users/zc/Desktop/php-7.0.33 -I/Users/zc/Desktop/php-7.0.33/ext/date/lib -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/opt/homebrew/opt/libiconv/include -I/Users/zc/Desktop/php-7.0.33/ext/sqlite3/libsqlite -I/Users/zc/Desktop/php-7.0.33/TSRM -I/Users/zc/Desktop/php-7.0.33/Zend  -no-cpp-precomp  -I/opt/homebrew/opt/libiconv/include -g -O2 -fvisibility=hidden   -c /Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/pcre_jit_compile.c -o ext/pcre/pcrelib/pcre_jit_compile.lo 
In file included from /Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/pcre_jit_compile.c:62:
In file included from /Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitLir.c:1566:
/Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitNativeARM_64.c:312:2: error: call to undeclared function 'sys_icache_invalidate'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
        SLJIT_CACHE_FLUSH(code, code_ptr);
        ^
/Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitConfigInternal.h:301:2: note: expanded from macro 'SLJIT_CACHE_FLUSH'
        sys_icache_invalidate((char*)(from), (char*)(to) - (char*)(from))
        ^
In file included from /Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/pcre_jit_compile.c:62:
In file included from /Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitLir.c:1566:
/Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitNativeARM_64.c:2042:2: error: call to undeclared function 'sys_icache_invalidate'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
        SLJIT_CACHE_FLUSH(inst, inst + 4);
        ^
/Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitConfigInternal.h:301:2: note: expanded from macro 'SLJIT_CACHE_FLUSH'
        sys_icache_invalidate((char*)(from), (char*)(to) - (char*)(from))
        ^
In file included from /Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/pcre_jit_compile.c:62:
In file included from /Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitLir.c:1566:
/Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitNativeARM_64.c:2049:2: error: call to undeclared function 'sys_icache_invalidate'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
        SLJIT_CACHE_FLUSH(inst, inst + 4);
        ^
/Users/zc/Desktop/php-7.0.33/ext/pcre/pcrelib/sljit/sljitConfigInternal.h:301:2: note: expanded from macro 'SLJIT_CACHE_FLUSH'
        sys_icache_invalidate((char*)(from), (char*)(to) - (char*)(from))
        ^
3 errors generated.
make: *** [ext/pcre/pcrelib/pcre_jit_compile.lo] Error 1
阅读 376
avatarAI BotBETA

在编译 PHP 7.0.33 时遇到 sys_icache_invalidate 函数未声明的错误,通常是因为编译环境或者编译选项配置不正确。PHP 7.0.33 依赖的 pcre 库使用了 SLJIT(Simple Lightweight JIT Compiler)库,这个库在 ARM 架构上可能需要一些特定的系统调用或函数来刷新指令缓存。

解决这个问题,可以尝试以下步骤:

  1. 确保使用正确的编译器和 SDK
    确认你正在使用适合你的 macOS 版本的 Xcode Command Line Tools,并安装了对应的 SDK。可以通过以下命令来安装或更新它们:

    xcode-select --install

或者通过 App Store 安装或更新 Xcode,并运行 Xcode 来确保 Command Line Tools 被正确安装。

  1. 检查配置脚本
    在编译 PHP 之前,运行 ./configure 脚本时,确保你指定了正确的编译选项和参数。有时,可能需要手动指定某些参数来适配你的系统架构。
  2. 手动定义 sys_icache_invalidate
    如果你确信 sys_icache_invalidate 应该由系统库提供,但编译器找不到它,你可以尝试在你的编译环境中定义这个函数。这通常不是一个推荐的做法,因为它可能涉及到对底层系统调用的直接操作,这可能会带来兼容性和稳定性问题。
  3. 使用预编译的二进制包
    如果上述方法都不奏效,考虑使用预编译的 PHP 二进制包,比如通过 Homebrew 安装 PHP,这样可以避免编译过程中可能遇到的复杂问题。

    brew install php@7.0

请注意,php@7.0 公式可能不再被 Homebrew 维护,因此你可能需要查找其他可靠的源。

  1. 升级 PHP 版本
    如果可能的话,考虑升级到更新的 PHP 版本。PHP 7.0 已经是一个较旧的版本,并且不再受到官方的支持。使用更新的版本通常可以获得更好的性能、安全性以及更完善的社区支持。

由于 sys_icache_invalidate 函数通常是与特定架构和操作系统版本相关的系统调用,因此确保你的编译环境与你尝试编译的 PHP 版本兼容是非常重要的。如果上述方法都不能解决问题,可能需要更深入地研究你的编译环境和相关依赖库,或者寻找其他用户是否遇到过类似的问题,并参考他们的解决方案。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏