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)。
首先,我安装了软件包gnupg并gpgme使用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 模块来解决此错误。这些是我完成的步骤:
下载 gnupg-pecl 模块:
pecl download gnupg
Run Code Online (Sandbox Code Playgroud)解压 gnupg-pecl 模块:
tar xvf gnupg-1.3.3.tgz
Run Code Online (Sandbox Code Playgroud)更改目录:
cd gnupg-1.3.3
Run Code Online (Sandbox Code Playgroud)php_gnupg.h通过更改第 49 行来修改:
zend_class_entry *gnupg_class_entry; 进入 static zend_class_entry *gnupg_class_entry;
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。
准备 PHP 模块进行编译,运行:
phpize
Run Code Online (Sandbox Code Playgroud)配置模块:
./configure
Run Code Online (Sandbox Code Playgroud)构建模块:
make
Run Code Online (Sandbox Code Playgroud)安装模块:
make install
Run Code Online (Sandbox Code Playgroud)编译后模块安装在/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)将扩展添加到 PHP。因此,打开/etc/php.ini并添加以下几行:
[gnupg]
extension=gnupg.so
Run Code Online (Sandbox Code Playgroud)通过执行以下行来测试扩展:
php -r "print_r(new gnupg());"
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3155 次 |
| 最近记录: |