如何在 GTK3 应用程序中使用 GcrSecureEntryBuffer?

How to use GcrSecureEntryBuffer in a GTK3 application?

我想为 GtkEntry 使用 GcrSecureEntryBuffer,因为用户将在其中输入密码。我找到了以下链接。

我写了这个玩具程序ztest.c:

#include <gck/gck.h>
#include <gcr/gcr.h>
#include <gtk/gtk.h>

int main(void)
{
    gtk_init(0, NULL);

    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    GtkWidget *entry = gtk_entry_new_with_buffer(gcr_secure_entry_buffer_new());
    gtk_container_add(GTK_CONTAINER(window), entry);

    gtk_widget_show_all(window);
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    gtk_main();
}

并安装了所需的库。

sudo apt install libgtk-3-dev libgcr-3-dev gcr p11-kit p11-kit-modules

根据我从 GCR 和 GCK headers 中学到的知识,我用

编译了这段代码
gcc -DGCR_API_SUBJECT_TO_CHANGE -DGCK_API_SUBJECT_TO_CHANGE $(pkg-config --cflags gtk+-3.0) -I/usr/include/gcr-3 -I/usr/include/gck-1/ -I/usr/include/p11-kit-1/ -o test ztest.c $(pkg-config --libs gtk+-3.0)

并得到以下错误。 (没有其他关于未定义函数的警告。)

/usr/bin/ld: /tmp/ccxVu7EL.o: in function `main':
ztest.c:(.text+0x26): undefined reference to `gcr_secure_entry_buffer_new'
collect2: error: ld returned 1 exit status

我该如何解决这个问题?还有什么必须安装的吗?这些库的编译器和链接器标志是否有 pkg-config 命令?

当您谈论“Gcr”时,您实际上是在谈论 2 个不同的库(每个库都有自己的 pkg-config 模块)

  • gcr-3:包含基本加密内容

  • gcr-ui-3:包含与 GTK 交互的代码(小部件和其他相关代码)

GcrSecureEntryBuffergcr-ui-3 的一部分,因此您应该使用它来添加必要的标志。