在 MAC/MAMP 10.8.4 上使用 PECL 安装 PHP gnupg

Amm*_*rks 3 php macos mamp gnupg

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

须藤 pecl 安装 gnupg

下载 gnupg-1.3.3.tgz ...
开始下载 gnupg-1.3.3.tgz(19,141 字节)
......完成: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扩展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
检查抄送...抄送
检查 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/ include/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,但我找不到在任何地方执行此操作的正确方法。

小智 5

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

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

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

pecl install gnupg
Run Code Online (Sandbox Code Playgroud)

在编写时,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  
Run Code Online (Sandbox Code Playgroud)

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

  1. 下载 gnupg-pecl 模块:

    pecl download gnupg
    
    Run Code Online (Sandbox Code Playgroud)
  2. 解压 gnupg-pecl 模块:

    tar xvf gnupg-1.3.3.tgz
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更改目录:

    cd gnupg-1.3.3
    
    Run Code Online (Sandbox Code Playgroud)
  4. php_gnupg.h通过更改第 49 行来修改:

    zend_class_entry *gnupg_class_entry; 进入 static zend_class_entry *gnupg_class_entry;

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

    zend_class_entry *gnupg_keylistiterator_class_entry; 进入 static zend_class_entry *gnupg_keylistiterator_class_entry;

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

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

    phpize
    
    Run Code Online (Sandbox Code Playgroud)
  2. 配置模块:

    ./configure
    
    Run Code Online (Sandbox Code Playgroud)
  3. 构建模块:

    make
    
    Run Code Online (Sandbox Code Playgroud)
  4. 安装模块:

    make install 
    
    Run Code Online (Sandbox Code Playgroud)
  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/
    
    Run Code Online (Sandbox Code Playgroud)
  6. 将扩展添加到 PHP。因此,打开/etc/php.ini并添加以下几行:

     [gnupg]
     extension=gnupg.so
    
    Run Code Online (Sandbox Code Playgroud)
  7. 通过执行以下行来测试扩展:

     php -r "print_r(new gnupg());"
    
    Run Code Online (Sandbox Code Playgroud)