我在网上找到了很多关于各种gtk使用的例子,但大多数都包含了包含的标题
#include <config.h>
并且我无法将这个标题放在哪里,所以我无法让这些例子起作用。
这是什么意思?
在哪里我可以采取或我可以取代这个标题?
或者我可以不同地配置这些文件/项目以使其工作,因为其他gtk项目在我的comp上工作?
目前我尝试编译套接字示例testsocket.c和
在编译期间,我得到错误未定义的引用'create_child_plug'。除了这个标题外,我认为没有任何理由不起作用。
但无论如何我可能是错的。
答案 0 :(得分:7)
我认为您正在尝试单独编译单个源文件,而不是单独使用它。有两个原因。
第一个原因:config.h
是Autoconf输出的头文件的默认名称,其中包含特定于平台的定义。这就是为什么你不会在任何地方找到它 - 它是在你的项目上运行./configure
时产生的,它的内容取决于你的系统配置方式。因此它不会包含在任何项目中,您必须使用Autoconf自己生成它。或者只是注释掉#include <config.h>
并查看缺少的定义,然后自己定义它们。
另一个原因:
目前我尝试编译套接字示例testsocket.c并在编译期间得到错误未定义引用'create_child_plug'。除了在这个标题中,我认为没有任何理由不起作用。 但无论如何我可能是错的。
实际上,该文件包含create_child_plug
的定义:
extern guint32 create_child_plug (guint32 xid, gboolean local);
所以问题不在于create_child_plug
没有定义。您不需要标题,它在源文件中定义。 extern
表示此函数的实际代码位于不同的源文件中。在这种情况下,您将获得链接时(非编译时)错误,因为链接器无法找到该函数的任何代码。您应该在.c
文件中查找它,而不是.h
文件,并编译该代码。
我建议您下载整个GTK源代码并对其进行编译,然后从那里运行测试程序,而不是从网上挑选单个源文件。
答案 1 :(得分:0)
实际上,GTK +目录中没有名为config.h
的标题。但是,我在论坛等上看到很多人遇到与你类似的问题。你可能正在寻找的是其中之一:
这些位于:
include/fontconfig/
lib/glib-2.0/include
lib/gdk-2.0/include
include/freetype2/freetype/config
另外,您确定已将所有必需的目录添加到编译器包含路径吗?
在ubuntu上只需pkg-config gtk+-2.0
即可轻松实现。