【问题标题】:Broken symbols in xfce mousepad source codexfce 鼠标垫源代码中的损坏符号
【发布时间】:2017-07-30 15:43:38
【问题描述】:

对不起,我是新手。 我正在尝试学习阅读 xfce4 的非常简单的文本编辑器:鼠标垫。 但在其中我可以看到两个破碎的符号 mousepad_window_get_type 和 mousepad_application_get_type

/home/utente/Desktop/mousepad-master/mousepad/mousepad-window.h:
   22  G_BEGIN_DECLS
   23  
   24: #define MOUSEPAD_TYPE_WINDOW            (mousepad_window_get_type ())
   25  #define MOUSEPAD_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOUSEPAD_TYPE_WINDOW, MousepadWindow))
   26  #define MOUSEPAD_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), MOUSEPAD_TYPE_WINDOW, MousepadWindowClass))
   ..
   44  typedef struct _MousepadWindow      MousepadWindow;
   45  
   46: GType           mousepad_window_get_type         (void) G_GNUC_CONST;
   47  
   48  GtkWidget      *mousepad_window_new              (void);



/home/utente/Desktop/mousepad-master/mousepad/mousepad-application.h:
   25  typedef struct _MousepadApplication      MousepadApplication;
   26  
   27: #define MOUSEPAD_TYPE_APPLICATION            (mousepad_application_get_type ())
   28  #define MOUSEPAD_APPLICATION(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOUSEPAD_TYPE_APPLICATION, MousepadApplication))
   29  #define MOUSEPAD_APPLICATION_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), MOUSEPAD_TYPE_APPLICATION, MousepadApplicationClass))
   ..
   32  #define MOUSEPAD_APPLICATION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), MOUSEPAD_TYPE_APPLICATION, MousepadApplicationClass))
   33  
   34: GType                mousepad_application_get_type               (void) G_GNUC_CONST;
   35  
   36  MousepadApplication *mousepad_application_get                    (void);

【问题讨论】:

  • “破碎的符号”是什么意思?能详细点吗?
  • 那些符号没有被引用。
  • 那些符号不在源文件中
  • 请编辑问题以澄清您的问题。作为一般规则,不要在问题的代码 LHS 上包含行号。在标题中指定一系列行号是合理的。你是如何链接你的代码的?您是否构建了您正在使用的 xfce 库?您如何证明相关库中不存在符号?你检查过哪些库正在使用吗?
  • 正如我所写,我正在阅读从官方存储库下载的资源

标签: c symbols xfce


【解决方案1】:

这些符号可能在项目的其他头文件中定义。在您的项目目录中执行$ grep -nr mousepad_window_get_type .。这将向您展示单词 mousepad_window_get_type 的所有可用用法。但是,您很可能在项目的任何地方都找不到这些符号,因为我怀疑它们是在编译项目时链接到的库之一中可用的函数。

【讨论】:

    【解决方案2】:

    *_get_type 函数由G_DEFINE_TYPE macro 定义。它们也可以由G_DECLARE_FINAL_TYPE 或G_DECLARE_DERIVABLE_TYPE 声明,但鼠标垫并非如此。

    Xfce 的项目是用 GTK+ 编写的,因此您需要先学习它,否则您会发现一些代码部分令人困惑。你可以找到很多 GTK+/GObject/GLib 的教程,它们的文档(希望)是全面的。 The GLib/GTK+ Development Platform 对初学者来说是一个很好的开始。

    【讨论】:

    • 使用 G_DEFINE_TYPE 宏不会调用这些符号。他们单独在两行代码中!
    • 否,但mousepad_window_get_type 被MOUSEPAD_TYPE_WINDOW 宏“别名化”并用作g_object_new (MOUSEPAD_TYPE_WINDOW, NULL)。这只是 GOjbect 的特质。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多