在 linux 中使用 GTK+ 调用带有按钮的对话框的库
library that invokes dialog box with pushbutton using GTK+ in linux
您好,我是第一次使用 GTK+。我在这里尝试使用 GTK+ 创建 GUI 环境。我的问题是 - 是否有可能使用 GTK+ 创建 window/dialogs 按钮,而库中没有主要功能..?
实际上,没有这种可能性,您不应该尝试。
回想一下,GTK 是一个 LGPL2.1 许可库,并且该许可类似于 "requires" 用户能够非常轻松地升级 GTK 库(在任何使用它的专有应用程序中)。最常用的方法是动态地 link libgtk-3.so
;一旦共享库升级,使用它的应用程序将能够透明地使用新版本的 libgtk
...
因此,让您自己的库成为一个 动态 linked ELF 共享对象 ,就像每个人一样。
如果您使用 GTK 提供或分发静态 linked 库,您需要(遵守 LGPL 许可)为用户提供将其重新link 到更新版本的方法GTK 版本。
而且你的库(无论它有什么形式)应该提供一个初始化 GTK 接口的函数,例如创建所有 GTK 小部件并安装回调 - 使用 g_signal_connect
等...- 在它们上面。
所以只需创建一个共享库,例如libmycode.so
(你可以从 link 到 libgtk-3.so
),它有一些初始化函数,例如运行 在您的源文件上执行以下命令(可能通过您的 Makefile
) mysrc1.c
mysrc2.c
gcc -Wall -fPIC -O -g -c $(pkg-config --cflags gtk+-x11-3.0) \
mysrc1.c -o mysrc1.pic.o
gcc -Wall -fPIC -O -g -c $(pkg-config --cflags gtk+-x11-3.0) \
mysrc2.c -o mysrc2.pic.o
gcc -O -g -shared mysrc1.pic.o mysrc2.pic.o \
$(pkg-config --libs gtk+-x11-3.0) \
-o libmycode.so
有关详细信息,请阅读 Program Library HowTo & Drepper's paper: How To Write Shared Libraries
请注意,静态库 libsomecode.a
只是成员对象文件 (*.o
) 的合并。所以没有办法透明地 link 它到任何共享对象(你可以采用外部约定 libsomecode.a
的用户应该 link 一个共享对象 -lgtk
)。相反,您可以 link 一个共享库 libmycode.so
到另一个共享库 libmycode.so
您好,我是第一次使用 GTK+。我在这里尝试使用 GTK+ 创建 GUI 环境。我的问题是 - 是否有可能使用 GTK+ 创建 window/dialogs 按钮,而库中没有主要功能..?
实际上,没有这种可能性,您不应该尝试。
回想一下,GTK 是一个 LGPL2.1 许可库,并且该许可类似于 "requires" 用户能够非常轻松地升级 GTK 库(在任何使用它的专有应用程序中)。最常用的方法是动态地 link libgtk-3.so
;一旦共享库升级,使用它的应用程序将能够透明地使用新版本的 libgtk
...
因此,让您自己的库成为一个 动态 linked ELF 共享对象 ,就像每个人一样。
如果您使用 GTK 提供或分发静态 linked 库,您需要(遵守 LGPL 许可)为用户提供将其重新link 到更新版本的方法GTK 版本。
而且你的库(无论它有什么形式)应该提供一个初始化 GTK 接口的函数,例如创建所有 GTK 小部件并安装回调 - 使用 g_signal_connect
等...- 在它们上面。
所以只需创建一个共享库,例如libmycode.so
(你可以从 link 到 libgtk-3.so
),它有一些初始化函数,例如运行 在您的源文件上执行以下命令(可能通过您的 Makefile
) mysrc1.c
mysrc2.c
gcc -Wall -fPIC -O -g -c $(pkg-config --cflags gtk+-x11-3.0) \
mysrc1.c -o mysrc1.pic.o
gcc -Wall -fPIC -O -g -c $(pkg-config --cflags gtk+-x11-3.0) \
mysrc2.c -o mysrc2.pic.o
gcc -O -g -shared mysrc1.pic.o mysrc2.pic.o \
$(pkg-config --libs gtk+-x11-3.0) \
-o libmycode.so
有关详细信息,请阅读 Program Library HowTo & Drepper's paper: How To Write Shared Libraries
请注意,静态库 libsomecode.a
只是成员对象文件 (*.o
) 的合并。所以没有办法透明地 link 它到任何共享对象(你可以采用外部约定 libsomecode.a
的用户应该 link 一个共享对象 -lgtk
)。相反,您可以 link 一个共享库 libmycode.so
到另一个共享库 libmycode.so