【问题标题】:Install PHP gnupg using PECL on MAC/MAMP 10.8.4在 MAC/MAMP 10.8.4 上使用 PECL 安装 PHP gnupg
【发布时间】:2014-04-25 16:44:16
【问题描述】:

我正在尝试使用 PECL 在 Mac 上安装 gnupg。

sudo pecl 安装 gnupg

下载 gnupg-1.3.3.tgz ... 开始下载 gnupg-1.3.3.tgz (19,141 bytes) ......完成:19,141 字节 5个源文件,构建 警告:php_bin /Applications/MAMP/bin/php/php5.5.3/bin/php 似乎有一个后缀 /php5.5.3/bin/php,但配置变量 php_suffix 不匹配 运行:phpize 配置: PHP API 版本:20121113 Zend 模块 API 编号:20121212 Zend Extension API 编号:220121212 在 /private/tmp/pear/install/pear-build-rootj1cVj1/gnupg-1.3.3 中构建 运行:/private/tmp/pear/install/gnupg/configure 检查处理长行的 grep 和 -e... /usr/bin/grep 检查 egrep... /usr/bin/grep -E 检查不截断输出的 sed... /opt/local/bin/gsed 正在检查 cc ... cc 检查 C 编译器是否工作......是的 检查 C 编译器默认输出文件名... a.out 检查可执行文件的后缀... 检查我们是否在交叉编译...否 检查目标文件的后缀... o 检查我们是否正在使用 GNU C 编译器...是的 检查 cc 是否接受 -g... 是 检查 cc 选项以接受 ISO C89... 不需要 检查如何运行 C 预处理器... cc -E 检查 icc... 不 检查 suncc... 否 检查 cc 是否同时理解 -c 和 -o ......是的 检查系统库目录... lib 检查编译器是否支持 -R... 否 检查编译器是否支持 -Wl,-rpath,... 是 检查构建系统类型... x86_64-apple-darwin12.4.0 检查主机系统类型... x86_64-apple-darwin12.4.0 检查目标系统类型... x86_64-apple-darwin12.4.0 检查 PHP 前缀... /Applications/MAMP/bin/php/php5.5.3 检查 PHP 包括... -I/Applications/MAMP/bin/php/php5.5.3/include/php -I/Applications/MAMP/bin/php/php5.5.3/include/php/main -I/Applications/ MAMP/bin/php/php5.5.3/include/php/TSRM -I/Applications/MAMP/bin/php/php5.5.3/include/php/Zend -I/Applications/MAMP/bin/php/php5.5.3/包含/php/ext -I/Applications/MAMP/bin/php/php5.5.3/include/php/ext/date/lib 检查 PHP 扩展目录... /Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212 检查 PHP 安装的标头前缀... /Applications/MAMP/bin/php/php5.5.3/include/php 检查是否启用调试...否 检查 zts 是否启用...否 检查 re2c ...不 配置:警告:如果要重新生成 PHP 解析器,则需要 re2c 0.13.4 或更高版本。 检查 gawk... gawk 检查 gnupg 支持...是的,共享 检查默认路径中的 gnupg 文件...未找到 配置:错误:请重新安装 gpgme 发行版 错误:`/private/tmp/pear/install/gnupg/configure' 失败

我已将问题的范围缩小到安装 gpgme,但我无法在任何地方找到正确的方法。

【问题讨论】:

    标签: php macos mamp gnupg


    【解决方案1】:

    我在使用 PHP 5.4.24、Mac OSX 10.9.3 时遇到了同样的问题。我必须采取以下步骤来使用 PECL 安装 gnupg (v1.3.3)。

    首先,我使用homebrew安装了软件包gnupggpgme。 Homebrew 在/usr/local 中安装你的包。这是导入的,因为 gnupg PECL 模块搜索以下位置 /usr/local/include /usr/include /usr/local/include/gpgme/ /usr/include/gpgme/ 以检测 gpgpme 的安装。

    其次,我尝试使用 PECL 安装 gnupgp:

    pecl install gnupg
    

    在编写时,PECL 模块的代码包含两条阻止模块被正确编译和链接的语句。这导致了以下错误:

    ...compile statements...
    cc ${wl}-flat_namespace ${wl}-undefined ${wl}suppress -o .libs/gnupg.so -bundle  .libs/gnupg.o .libs/gnupg_keylistiterator.o  -L/usr/local/include/lib -lgpgme  -Wl,-rpath -Wl,/usr/local/include/lib
    ld: warning: directory not found for option '-L/usr/local/include/lib'
    duplicate symbol _gnupg_keylistiterator_class_entry in:
        .libs/gnupg.o
        .libs/gnupg_keylistiterator.o
    duplicate symbol _gnupg_class_entry in:
        .libs/gnupg.o
        .libs/gnupg_keylistiterator.o
    ld: 2 duplicate symbols for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make: *** [gnupg.la] Error 1  
    

    第三,我必须根据Jim Jagielski's patch手动编辑和安装PECL模块来解决这个错误。这些是我完成的步骤:

    1. 下载 gnupg-pecl 模块:

      pecl download gnupg
      
    2. 解压 gnupg-pecl 模块:

      tar xvf gnupg-1.3.3.tgz
      
    3. 更改目录:

      cd gnupg-1.3.3
      
    4. 通过更改第 49 行修改 php_gnupg.h

      zend_class_entry *gnupg_class_entry; 转为static zend_class_entry *gnupg_class_entry;

    5. 通过更改第 44 行修改 php_gnupg_keylistiterator.h

      zend_class_entry *gnupg_keylistiterator_class_entry; 转为static zend_class_entry *gnupg_keylistiterator_class_entry;

    在 gnupg-1.4.0 或更高版本上不需要步骤 4 和 5。

    1. 准备PHP模块进行编译,运行:

      phpize
      
    2. 配置模块:

      ./configure
      
    3. 构建模块:

      make
      
    4. 安装模块:

      make install 
      
    5. 编译后模块安装在/Users/USERNAME/tmp/pear/install/gnupg-1.3.3/module。因为PHP共享扩展安装在/usr/lib/php/extensions/no-debug-non-zts-20100525/,所以我复制了模块:

       cp /Users/USERNAME/tmp/pear/install/gnupg-1.3.3/modules/gnupg.so /usr/lib/php/extensions/no-debug-non-zts-20100525/
      
    6. 将扩展添加到 PHP。因此打开/etc/php.ini 并添加以下行:

       [gnupg]
       extension=gnupg.so
      
    7. 通过执行以下行来测试扩展:

       php -r "print_r(new gnupg());"
      

    【讨论】:

    • 很好的答案。就这样继续下去!
    【解决方案2】:

    请记住,这是从源代码构建的,因此您需要 gpgme 标头才能编译扩展。因此,查找该软件包的开发版本: 在Linux中,我遇到了同样的问题: gpgme-开发

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 2013-02-21
      相关资源
      最近更新 更多