【问题标题】:Gtk can't find "<config.h>"Gtk 找不到“<config.h>”
【发布时间】:2012-02-24 23:55:39
【问题描述】:

我在网上找到了很多关于各种 gtk 用途的示例,但其中大多数都包含包含标题

#include <config.h>

而且我无法在任何地方找到此标题,因此我无法让这些示例正常工作。

这是关于什么的?
我可以在哪里使用或用什么可以替换此标头?
或者我可以以不同的方式配置这些文件/项目,以使它们像其他 gtk 项目在我的 comp 上工作一样工作?

目前我尝试编译套接字示例testsocket.c 和 在编译期间,我收到错误未定义的“create_child_plug”引用。除了在这个标题中,我看不出有任何理由让它不起作用。
但无论如何我可能是错的。

【问题讨论】:

标签: c gtk


【解决方案1】:

我认为您正在尝试自己编译单个源文件,而该源文件并非旨在独立工作。两个原因。

第一个原因:config.h 是 Autoconf 输出的包含平台特定定义的头文件的默认名称。这就是为什么您在任何地方都找不到它的原因 - 它是在您对项目运行 ./configure 时生成的,其内容取决于您的系统配置方式。所以它不会包含在任何项目中,您必须使用 Autoconf 自己生成它。或者只是注释掉#include &lt;config.h&gt;,看看缺少哪些定义,然后自己定义。

另一个原因:

目前我尝试编译套接字示例 testsocket.c,在编译过程中我收到错误未定义的对“create_child_plug”的引用。除了在这个标题中,我看不出有任何理由让它不起作用。 但无论如何我可能是错的。

实际上,该文件包含create_child_plug的定义:

extern guint32 create_child_plug (guint32 xid, gboolean local);

所以问题不在于没有定义create_child_plug。您不需要标头,它已在源文件中定义。 extern 表示此函数的实际代码位于不同的源文件中。在这种情况下,您会收到链接时(不是编译时)错误,因为链接器找不到该函数的任何代码。您应该在 .c 文件中查找它,而不是在 .h 文件中,并编译该代码。

我建议你下载整个 GTK 源代码并编译它,然后从那里运行测试程序,而不是从网上挑选单个源文件。

【讨论】:

  • 嗯,你说的很对,很抱歉造成混乱。还不能通过 mysqlf 编译整个 gtk,但在某些时候我肯定会的。因为使用 gtk 我仍在与 C 编程作斗争(如您所见)。并且错过的功能恰好在其他(外部)文件中,我认为问题出在 config.h 中(事实并非如此)。感谢您的帮助。
【解决方案2】:

实际上,GTK+ 目录中没有名为config.h 的头文件。但是,我在论坛等上看到很多人遇到与您类似的问题。您可能正在寻找以下其中之一:

  • fontconfig.h
  • glibconfig.h
  • gdkconfig.h
  • ftconfig.h

这些位于:

  • include/fontconfig/
  • lib/glib-2.0/include
  • lib/gdk-2.0/include
  • include/freetype2/freetype/config

另外,您确定已将所有必需目录添加到编译器包含路径中吗? 在 ubuntu 上,只需 pkg-config gtk+-2.0 就很容易了。

【讨论】:

    猜你喜欢
    • 2018-11-22
    • 1970-01-01
    • 2021-10-04
    • 2019-10-17
    • 1970-01-01
    • 2020-06-01
    • 2019-04-07
    • 2018-10-06
    相关资源
    最近更新 更多