GPGME:加密引擎无效 我试图在C++项目上检查GPGME,但是当我尝试访问OpenPGP引擎< /P>

GPGME:加密引擎无效 我试图在C++项目上检查GPGME,但是当我尝试访问OpenPGP引擎< /P>,c++,gpgme,C++,Gpgme,我已经在我的计算机上安装了GnuPG,我正在windows下运行 更多的命令gpgconf和gpg2工作正常,因此GnuGP安装良好 我将gpgme的调试级别设置为9,但出现了一个错误,日志如下: GPGME 2015-12-28 19:05:21 <0x2b18> gpgme_debug: level=9 GPGME 2015-12-28 19:05:21 <0x2b18> gpgme_debug: gpgme='D:\CODING\C++\bin\Debug' G

我已经在我的计算机上安装了GnuPG,我正在windows下运行

更多的命令
gpgconf
gpg2
工作正常,因此GnuGP安装良好

我将gpgme的调试级别设置为9,但出现了一个错误,日志如下:

GPGME 2015-12-28 19:05:21 <0x2b18>  gpgme_debug: level=9
GPGME 2015-12-28 19:05:21 <0x2b18>  gpgme_debug: gpgme='D:\CODING\C++\bin\Debug'
GPGME 2015-12-28 19:05:21 <0x2b18>  gpgme_check_version: call: 0=00000000, req_version=(null), VERSION=1.6.0
GPGME 2015-12-28 19:05:21 <0x2b18>  gpgme_check_version_internal: call: 0=00000000, req_version=(null), offset_sig_validity=32
GPGME 2015-12-28 19:05:21 <0x2b18>  gpgme-dinfo: gpgconf='C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe'
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_pipe: enter: filedes=0028F680, inherit_idx=1 (GPGME uses it for reading)
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_pipe: leave: read=0x0 (00000150/0x0), write=0x1 (00000164/0x0)
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: enter: path=0AF93FD0, path=C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, argv[ 0] = C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, argv[ 1] = --list-dirs
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, tmp_name = C:\Users\User\AppData\Local\Temp\gpgme-HBCBJ6
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, CreateProcess failed: ec=87
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: error: Input/output error
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: enter: fd=00000000
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: check: fd=00000000, fd=0 -> handle=00000150 socket=-1 dupfrom=-1
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: leave: result=0
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: enter: fd=00000001
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: check: fd=00000001, fd=1 -> handle=00000164 socket=-1 dupfrom=-1
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: leave: result=0
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_pipe: enter: filedes=0028F680, inherit_idx=1 (GPGME uses it for reading)
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_pipe: leave: read=0x0 (00000168/0x0), write=0x1 (00000174/0x0)
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: enter: path=0AF93FD0, path=C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, argv[ 0] = C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, argv[ 1] = --list-components
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, tmp_name = C:\Users\User\AppData\Local\Temp\gpgme-4Cb3i3
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, CreateProcess failed: ec=87
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: error: Input/output error
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: enter: fd=00000000
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: check: fd=00000000, fd=0 -> handle=00000168 socket=-1 dupfrom=-1
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: leave: result=0
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: enter: fd=00000001
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: check: fd=00000001, fd=1 -> handle=00000174 socket=-1 dupfrom=-1
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: leave: result=0
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_pipe: enter: filedes=0028FA5C, inherit_idx=1 (GPGME uses it for reading)
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_pipe: leave: read=0x0 (0000017C/0x0), write=0x1 (00000190/0x0)
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: enter: path=0AF93FD0, path=C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, argv[ 0] = C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, argv[ 1] = --version
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, tmp_name = C:\Users\User\AppData\Local\Temp\gpgme-DrOuSZ
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: check: path=0AF93FD0, CreateProcess failed: ec=87
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_spawn: error: Input/output error
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: enter: fd=00000000
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: check: fd=00000000, fd=0 -> handle=0000017C socket=-1 dupfrom=-1
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: leave: result=0
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: enter: fd=00000001
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: check: fd=00000001, fd=1 -> handle=00000190 socket=-1 dupfrom=-1
GPGME 2015-12-28 19:05:21 <0x2b18>  _gpgme_io_close: leave: result=0
GPGME 2015-12-28 19:05:21 <0x2b18>  engine.c:365: returning error: Invalid crypto engine
GPGME 2015-12-28 19:05:21 <0x2b18>  engine.c:155: returning error: Invalid crypto engine
Invalid crypto engine
GPGME 2015-12-28 19:05:21 GPGME\U调试:级别=9
GPGME 2015-12-28 19:05:21 GPGME\U调试:GPGME='D:\CODING\C++\bin\debug'
GPGME 2015-12-28 19:05:21 GPGME检查版本:调用:0=00000000,请求版本=(空),版本=1.6.0
GPGME 2015-12-28 19:05:21 GPGME检查版本内部:调用:0=00000000,请求版本=(空),偏移量信号有效性=32
GPGME 2015-12-28 19:05:21 GPGME dinfo:gpgconf='C:\ProgramFiles(x86)\GNU\GnuPG\gpgconf.exe'
GPGME 2015-12-2819:05:21\u GPGME\u io\u管道:输入:filedes=0028F680,inherit\u idx=1(GPGME使用它进行读取)
GPGME 2015-12-2819:05:21\u GPGME\u io\u管道:离开:读=0x0(00000150/0x0),写=0x1(00000164/0x0)
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:enter:path=0AF93FD0,path=C:\Program Files(x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:check:path=0AF93FD0,argv[0]=C:\Program Files(x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-2819:05:21"GPGME"io"产卵:检查:路径=0AF93FD0,argv[1]=--列表目录
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:check:path=0AF93FD0,tmp\u name=C:\Users\User\AppData\Local\Temp\GPGME-HBCBJ6
GPGME 2015-12-28 19:05:21_GPGME_io_产卵:检查:路径=0AF93FD0,CreateProcess失败:ec=87
GPGME 2015-12-28 19:05:21\u GPGME\u io\u产卵:错误:输入/输出错误
GPGME 2015-12-2819:05:21关闭:输入:fd=00000000
GPGME 2015-12-2819:05:21\u GPGME\u io\u关闭:检查:fd=00000000,fd=0->handle=00000150套接字=-1 dupfrom=-1
GPGME 2015-12-2819:05:21关闭:离开:结果=0
GPGME 2015-12-2819:05:21关闭:输入:fd=00000001
GPGME 2015-12-2819:05:21\u GPGME\u io\u关闭:检查:fd=00000001,fd=1->handle=00000164套接字=-1 dupfrom=-1
GPGME 2015-12-2819:05:21关闭:离开:结果=0
GPGME 2015-12-2819:05:21\u GPGME\u io\u管道:输入:filedes=0028F680,inherit\u idx=1(GPGME使用它进行读取)
GPGME 2015-12-2819:05:21\u GPGME\u io\u管道:离开:读=0x0(00000168/0x0),写=0x1(00000174/0x0)
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:enter:path=0AF93FD0,path=C:\Program Files(x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:check:path=0AF93FD0,argv[0]=C:\Program Files(x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:check:path=0AF93FD0,argv[1]=--列出组件
GPGME 2015-12-28 19:05:21\u GPGME\u io\u繁殖:检查:路径=0AF93FD0,tmp\u名称=C:\Users\User\AppData\Local\Temp\GPGME-4Cb3i3
GPGME 2015-12-28 19:05:21_GPGME_io_产卵:检查:路径=0AF93FD0,CreateProcess失败:ec=87
GPGME 2015-12-28 19:05:21\u GPGME\u io\u产卵:错误:输入/输出错误
GPGME 2015-12-2819:05:21关闭:输入:fd=00000000
GPGME 2015-12-2819:05:21\u GPGME\u io\u关闭:检查:fd=00000000,fd=0->handle=00000168套接字=-1 dupfrom=-1
GPGME 2015-12-2819:05:21关闭:离开:结果=0
GPGME 2015-12-2819:05:21关闭:输入:fd=00000001
GPGME 2015-12-2819:05:21\u GPGME\u io\u关闭:检查:fd=00000001,fd=1->handle=00000174套接字=-1 dupfrom=-1
GPGME 2015-12-2819:05:21关闭:离开:结果=0
GPGME 2015-12-2819:05:21\u GPGME\u io\u管道:输入:filedes=0028FA5C,inherit\u idx=1(GPGME使用它进行读取)
GPGME 2015-12-2819:05:21\u GPGME\u io\u管道:离开:读=0x0(0000017C/0x0),写=0x1(00000190/0x0)
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:enter:path=0AF93FD0,path=C:\Program Files(x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:check:path=0AF93FD0,argv[0]=C:\Program Files(x86)\GNU\GnuPG\gpgconf.exe
GPGME 2015-12-2819:05:21"GPGME"io"产卵:检查:路径=0AF93FD0,argv[1]=--版本
GPGME 2015-12-28 19:05:21\u GPGME\u io\u spawn:check:path=0AF93FD0,tmp\u name=C:\Users\User\AppData\Local\Temp\GPGME droosz
GPGME 2015-12-28 19:05:21_GPGME_io_产卵:检查:路径=0AF93FD0,CreateProcess失败:ec=87
GPGME 2015-12-28 19:05:21\u GPGME\u io\u产卵:错误:输入/输出错误
GPGME 2015-12-2819:05:21关闭:输入:fd=00000000
GPGME 2015-12-2819:05:21\u GPGME\u io\u关闭:检查:fd=00000000,fd=0->handle=0000017C套接字=-1 dupfrom=-1
GPGME 2015-12-2819:05:21关闭:离开:结果=0
GPGME 2015-12-2819:05:21关闭:输入:fd=00000001
GPGME 2015-12-2819:05:21\u GPGME\u io\u关闭:检查:fd=00000001,fd=1->handle=00000190套接字=-1 dupfrom=-1
GPGME 2015-12-2819:05:21关闭:离开:结果=0
GPGME 2015-12-28 19:05:21引擎c:365:返回错误:加密引擎无效
GPGME 2015-12-28 19:05:21引擎c:155:返回错误:加密引擎无效
无效的加密引擎
编辑: 以下是我运行的代码:

#include "gpgme.h"
#include <iostream>
using namespace std;

void genKey()
{
    gpgme_set_global_flag("debug","9");
    gpgme_check_version(NULL);
    gpg_error_t test = gpgme_engine_check_version(GPGME_PROTOCOL_OpenPGP);
    cout << gpgme_strerror(test) << endl;
    cout << "Engine : " << gpgme_get_dirinfo("gpg-name") << endl;
}
#包括“gpgme.h”
#包括
使用名称空间std;
void genKey()
{
gpgme_设置_全局_标志(“调试”,“9”);
gpgme\U检查\U版本(空);
gpg_错误测试=gpgme_引擎检查版本(gpgme_协议OpenPGP);
无法解决:



我在一个虚拟目录中安装了gpg4win,我在我的bin中复制了整个目录。我在
gpgme\u set\u global\u标志(“禁用gpgconf”,“1”)
gpgme\u set\u global\u标志(“gpg名称”,“gpgconf”)
之前添加
gpgme\u检查版本(空)

现在可以使用了,谢谢。

您的代码似乎对我有效,只是我没有在调用
gpgme\u get\u dirinfo()
时包含该行,因为我的实现没有该功能(不确定原因)。