如何在 GTK3 应用程序中使用 GcrSecureEntryBuffer?
How to use GcrSecureEntryBuffer in a GTK3 application?
我想为 GtkEntry 使用 GcrSecureEntryBuffer,因为用户将在其中输入密码。我找到了以下链接。
- Gnome 开发者手册:https://developer.gnome.org/gcr/stable/GcrSecureEntryBuffer.html
- GCR 库参考手册:https://www.manpagez.com/html/gcr-3/gcr-3-3.28.0/
- GCR 项目:https://gitlab.gnome.org/GNOME/gcr
我写了这个玩具程序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 交互的代码(小部件和其他相关代码)
GcrSecureEntryBuffer
是 gcr-ui-3
的一部分,因此您应该使用它来添加必要的标志。
我想为 GtkEntry 使用 GcrSecureEntryBuffer,因为用户将在其中输入密码。我找到了以下链接。
- Gnome 开发者手册:https://developer.gnome.org/gcr/stable/GcrSecureEntryBuffer.html
- GCR 库参考手册:https://www.manpagez.com/html/gcr-3/gcr-3-3.28.0/
- GCR 项目:https://gitlab.gnome.org/GNOME/gcr
我写了这个玩具程序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 交互的代码(小部件和其他相关代码)
GcrSecureEntryBuffer
是 gcr-ui-3
的一部分,因此您应该使用它来添加必要的标志。