在linux中使用GTK +调用带按钮的对话框的库

时间:2015-10-20 04:21:31

标签: c++ linux gtk

您好我是第一次使用GTK +。在这里,我尝试使用GTK +创建GUI环境。在这里我的问题是 - 是否有可能使用GTK +创建窗口/对话框,按钮,而不是库中的主要功能..?

1 个答案:

答案 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链接到另一个库