首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Vala编译gcrypt

为Vala编译gcrypt
EN

Stack Overflow用户
提问于 2016-02-22 05:17:45
回答 1查看 395关注 0票数 1

我试图用libgcrypt的.vapi在Vala中编译代码。我在系统中安装了库,并在c中运行了一个测试。C中的代码编写没有错误:我输入了以下命令来编译C代码:

代码语言:javascript
复制
gcc -o main main.c -l gcrypt

代码运行得很完美。

但是,下面用Vala编写的代码不使用命令进行编译:

代码语言:javascript
复制
valac --pkg gcrypt --Xcc=-lgcrypt main.vala

main.vala是

代码语言:javascript
复制
using GCrypt;
    public static int main(string[] args)
    {
        Hash h;
        Hash.open(out h, Hash.Algorithm.MD5, Hash.Flag.SECURE);
        return 0;
    }

我不知道我做错了什么。

编辑:很抱歉没有发布错误,但是有:

Loaded package /usr/share/vala-0.30/vapi/glib-2.0.vapi'

Loaded package /usr/share/vala-0.30/vapi/gobject-2.0.vapi'

Loaded package /usr/share/vala-0.30/vapi/gcrypt.vapi'

cc -o '/home/kyul/Documents/Codes/Vala/test_gcrypt/main' '/home/kyul/Documents/Codes/Vala/test_gcrypt/main.vala.c' -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lgobject-2.0 -lglib-2.0 '-lgcrypt' /home/kyul/Documents/Codes/Vala/test_gcrypt/main.vala.c: In function ‘_vala_main’:

/home/kyul/Documents/Codes/Vala/test_gcrypt/main.vala.c:22:38: error: ‘GCRY_MD_FLAGSECURE’ undeclared (first use in this function) gcry_md_open (&_tmp0_, GCRY_MD_MD5, GCRY_MD_FLAGSECURE); ^ /home/kyul/Documents/Codes/Vala/test_gcrypt/main.vala.c:22:38: note: each undeclared identifier is reported only once for each function it appears in error: cc exited with status 256 Compilation failed: 1 error(s), 0 warning(s)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-22 10:37:00

很可能您丢失了.vapi文件。

代码语言:javascript
复制
$ wget https://raw.githubusercontent.com/nemequ/vala-extra-vapis/master/gcrypt.vapi
$ patch < gcrypt.patch
$ valac --vapidir=. --pkg gcrypt --Xcc=-lgcrypt main.vala
$ ./main
$ echo $?
0

我以前从未使用过vala的gcrypt,为了让您的示例工作,我不得不对gcrypt.vapi进行修补,但是修补程序非常简单:

代码语言:javascript
复制
--- gcrypt.vapi
+++ gcrypt.vapi
@@ -619,7 +619,7 @@
            public Error get_oid (uchar[] buffer);
        }

-       [CCode (cname = "enum gcry_md_flags", cprefix = "GCRY_MD_FLAG")]
+       [CCode (cname = "enum gcry_md_flags", cprefix = "GCRY_MD_FLAG_")]
        public enum Flag {
            SECURE,
            HMAC

更新:关于密码错误的,显然Cipher类缺少free_function映射:

代码语言:javascript
复制
--- a/gcrypt.vapi   2016-02-22 21:40:34.458977385 +0200
+++ b/gcrypt.vapi   2016-02-22 21:39:59.662976449 +0200
@@ -560,7 +560,7 @@
            CBC_MAC   /* Enable CBC message auth. code (MAC). */
        }
        [Compact]
-       [CCode (cname = "gcry_cipher_hd_t", lower_case_cprefix = "gcry_cipher_")]
+       [CCode (cname = "struct gcry_cipher_handle", lower_case_cprefix = "gcry_cipher_", free_function = "gcry_cipher_close")]
        public class Cipher {
            public static Error open (out Cipher cipher, Algorithm algo, Mode mode, Flag flags);
            public void close ();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35546250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档