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

3
我正在尝试使用PECL在Mac上安装gnupg。
sudo pecl install 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 Extension Api编号:220121212 在/private/tmp/pear/install/pear-build-rootj1cVj1/gnupg-1.3.3中构建 运行:/private/tmp/pear/install/gnupg/configure 检查是否有处理长行和-e的grep.../usr/bin/grep 检查egrep.../usr/bin/grep -E 检查sed是否截断输出.../opt/local/bin/gsed 检查cc...cc 检查C编译器是否可用...yes 检查默认输出文件名的后缀... 检查是否交叉编译...no 检查目标文件的后缀...o 检查是否使用GNU C编译器...yes 检查cc是否接受-g...yes 检查是否需要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上,但我找不到正确的安装方法。

3个回答

6
我曾经遇到过同样的问题,当使用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的补丁手动编辑和安装PECL模块来解决此错误。以下是我完成的步骤:

  1. Download the gnupg-pecl module:

    pecl download gnupg
    
  2. Unpack the gnupg-pecl module:

    tar xvf gnupg-1.3.3.tgz
    
  3. Change directory:

    cd gnupg-1.3.3
    
  4. Modify php_gnupg.h by changing line 49:

    zend_class_entry *gnupg_class_entry; into static zend_class_entry *gnupg_class_entry;

  5. Modify php_gnupg_keylistiterator.h by changing line 44:

    zend_class_entry *gnupg_keylistiterator_class_entry; into static zend_class_entry *gnupg_keylistiterator_class_entry;

在gnupg-1.4.0或更高版本中,不需要执行第4步和第5步。

  1. Prepare the PHP module for compiling, run:

    phpize
    
  2. Configure the module:

    ./configure
    
  3. Build the module:

    make
    
  4. Install the module:

    make install 
    
  5. After compiling the module was installed in /Users/USERNAME/tmp/pear/install/gnupg-1.3.3/module. Because the PHP shared extensions are installed in /usr/lib/php/extensions/no-debug-non-zts-20100525/, I copied the module:

     cp /Users/USERNAME/tmp/pear/install/gnupg-1.3.3/modules/gnupg.so /usr/lib/php/extensions/no-debug-non-zts-20100525/
    
  6. Add the extension to PHP. Therefore open /etc/php.ini and add the following lines:

     [gnupg]
     extension=gnupg.so
    
  7. Test the extension, by executing the following line:

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

很棒的答案。继续保持! - Jens Erat

1

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


0
遇到了同样的问题,尝试了各种方法都不行。最后成功的是手动安装步骤,使用了这个仓库。
** 适用于arm64的Mac电脑。

https://github.com/php-gnupg/php-gnupg

安装步骤如下:
1. 创建一个目录,用于克隆存储库。 2. 在创建的目录中运行以下命令。
git clone --recursive https://github.com/php-gnupg/php-gnupg.git
cd php-gnupg
phpize
./configure
make
sudo make install

最后需要将以下行添加到php.ini文件中。
extension=gnupg.so

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接