您好我是第一次使用GTK +。在这里,我尝试使用GTK +创建GUI环境。在这里我的问题是 - 是否有可能使用GTK +创建窗口/对话框,按钮,而不是库中的主要功能..?
答案 0 :(得分:0)
实际上,没有这种可能性,你不应该尝试。
回想一下,GTK是一个LGPL2.1许可库,该许可证排序“要求”用户能够非常轻松地升级GTK库(在使用它的任何专有应用程序中)。通常的方法是动态链接libgtk-3.so
;一旦共享库升级,使用它的应用程序就能透明地使用新版本的libgtk
...
因此,像每个人一样,使自己的库成为动态链接的ELF共享对象。
如果您使用GTK提供或分发静态链接库,则需要(遵守LGPL许可证)为用户提供将其重新链接到较新版本GTK的方法。
你的库(无论它有什么形式)应该提供一个初始化GTK接口的函数,例如:创建所有GTK小部件并安装回调 - 使用g_signal_connect
等...... - 。
只需制作共享库,例如libmycode.so
(您可以链接到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的论文:How To Write Shared Libraries
请注意,静态库libsomecode.a
只是成员对象文件(*.o
)的合并。因此,无法将其透明地链接到任何共享对象(您可以采用libsomecode.a
的用户应该链接共享对象-lgtk
的外部约定。相反,您可以在构建libmycode.so
libmycode.so
链接到另一个库