当前位置: 首页 > 知识库问答 >
问题:

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

钱锐
2024-05-14

/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

共有1个答案

姜博
2024-05-14

在编译 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 版本兼容是非常重要的。如果上述方法都不能解决问题,可能需要更深入地研究你的编译环境和相关依赖库,或者寻找其他用户是否遇到过类似的问题,并参考他们的解决方案。

 类似资料:
  • 当我做,与: 配置摘要: 调试级别:fastdebug HS调试级别:快速调试 JVM变体:服务器 JVM特性:服务器:'aot cds cmsgc编译器1编译器2 dtrace Epsilong C g1gc graal jfr jni检查jvmci jvmti管理nmt并行GC串行GC服务vm结构' OpenJDK目标:操作系统:macosx,CPU架构:x86,地址长度:64 版本字符串:1

  • 在macOS终端中运行时,出现以下错误。 PHP警告:preg_match():JIT编译失败:内存不足phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php 在线755 在第755行PHP警告:preg_match():JIT编译失败:没有更多的内存在phar://usr/本地/bin/composer

  • macOS 安装 Docker Desktop CE 系统要求 Docker Desktop for Mac 要求系统最低为 macOS Sierra 10.12。 安装 使用 Homebrew 安装 Homebrew 的 Cask 已经支持 Docker Desktop for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装: $ brew cask install doc

  • macos系统(m2max)在idea(2024.2专业版和教育版都试过)上本地编译代码通过(本地直接使用编译好的jar包 使用命令启动:java -jar --debug 命令启动报错循环依赖); 但是使用编译后的jar包发布线上后,启动后报错循环依赖,同样环境和项目win10上编译后正常发布线上并启动。。。。。 排查问题: (1)排查了maven(使用3.9.2)和jdk(1.8)并没有发现什

  • Electron有API来配置macOS Dock中的应用程序图标。 A macOS-only API exists to create a custom dock menu, but Electron also uses the app's dock icon to implement cross-platform features like recent documents and appli

  • Platform setup iOS setup Install Xcode Set up the iOS simulator Create and run a simple Flutter app Deploy to iOS devices Android setup Install Android Studio Set up your Android device Set up the And