This document introduces the GObject library. This cannot replace the official tutorial/reference. It is recommended to lookup the official reference every time you encountered new concepts.
--
After trying to learn GObject object system for more than ten times (and failed as many times as I have tried), I decided to try another approach.
Q: You are stupid.
A: Yeah. I think I am. Or I am just stuck.
Q: What made you stuck?
A: I have always believed that GLib/GObject is overly complicated and verbose and ugly in grammar and not suitable for everyday programming. See how many boilerplates you need to define a class. You need to include the name of the class in every method call. You need to cast a lot to supress warnings. ... All of these haunted me and told me "you could not understand it" from time to time.
Q: Then?
A: I must believe GObject is simple. (I really wonder if hypnotism work this well?)
-- Background information --
Q: What is GObject?
A: It is a part of the GLib library. It allows you to write object-oriented programs in the C language.
Q: What is GLib?
A: A utility library in the C language. It provides platform-transparency and helps in all trivial aspects like string manipulation, memory allocation, File/Network IO, concurrency/synchronization, event/signal/mainloop, dynamically loaded modules and a object-oriented type system, of course. I guess it is a helper library to make GTK+ easier to implement, but it is not bound to GUI programming.
:: For more information, visit
http://www.gtk.org/.
-- Blogging plan --
I will post more articles in my blog to record my process of learning. By the way, this document may contain error (feedback is always welcome). If you are in doubt, you should always consult the official GObject documentation which is the sub-ultimate authority of it.
Q: What is the ultimate authority, then?
A: The f**king source code, of course. It is always right because it is what the library is compiled from. Read it when the documentation fails to tell the whole story.
I shall create my own fundamental type, which I am not supposed to create since I am not Tim Janik. Then I shall see whether my code works. And then I will make it classed, instantiatable, inheritable. Then add properties, signals and implement interfaces. I will also consider GValue container later.
Q: Wait. Who is asking question in these Q/A paragraphs?
A: Myself. Many questions will be raised during learning. I will try to answer my own questions. (Be critical when reading my "answers")
-- A minimal GObject program --
Install GLib 2.x first. Download at
http://www.gtk.org/. If you use the GLib provided by your distribution, make sure the development package is installed. (glib2-devel for Fedora)
#include <glib-object.h>
int main() {
g_type_init(); // This is necessary
return 0;
}
Compile with:
引用
gcc `pkg-config --cflags --libs gobject-2.0` example.c -o example
分享到:
相关推荐
离线安装包,亲测可用
离线安装包,亲测可用
离线安装包,亲测可用
离线安装包,亲测可用
离线安装包,亲测可用
液化天然气LGI是基于gobject...安装: 为了编译lgi的本机部分,必须安装gobject-introspection> = 0.10.8开发包,尽管首选版本是> = 1.30。 在基于debian的系统(如Ubuntu)上,该开发包称为libgirepository1.0-dev在
crystal-gobject:Crystal的gobject-introspection
官方离线安装包,亲测可用
官方离线安装包,亲测可用
gobject-query - display a tree of types IV. Tutorial How To define and implement a new GObject? Boilerplate header code Boilerplate code Object Construction Object Destruction Object methods ...
离线安装包,亲测可用
离线安装包,亲测可用
离线安装包,亲测可用
离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用
离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装