水曜日, 7月 01, 2009

GTK+ Application Built on GtkBuilder Using Glade

  • GTK+ programs with GtkBuilder and dynamic signal handlers

    Excert Hello.c Sample
    #include <gtk/gtk.h>
    void close_app(GtkWidget* widget,gpointer user_data) {
    gtk_main_quit();
    }
    int main (int argc, char **argv) {
    GtkBuilder *gtkBuilder;
    GtkWidget *mainwin;
    gtk_set_locale();
    /* Initialize the widget set */
    gtk_init (&argc, &argv);
    /* Create the main window */
    gtkBuilder= gtk_builder_new();
    gtk_builder_add_from_file(gtkBuilder,"hello.ui",NULL);
    gtk_builder_connect_signals ( gtkBuilder, NULL );
    mainwin= GTK_WIDGET(gtk_builder_get_object(gtkBuilder,"window1"));
    g_object_unref ( G_OBJECT(gtkBuilder) );
    /* Show the application window */
    gtk_widget_show_all ( mainwin );
    /* Enter the main event loop, and wait for user interaction */
    gtk_main ();
    /* The user lost interest */
    return 0;
    }

    コンパイル:
    gcc -Wall -g -o hello hello.c -export-dynamic `pkg-config --cflags --libs gtk+-2.0`

    "-export-dynamic"フラグを追加して、作成した実行ファイルとこフラグがない時に作成した実行ファイルはどこかに差がありますか?下の分が全然読み取れません。


    9 Dlopened modules
    Another situation where you would use `-export-dynamic' is if symbols from your executable are needed to satisfy unresolved references in a library you want to dlopen. In this case, you should use `-export-dynamic' while linking the executable that calls dlopen:
    burger$ libtool gcc -export-dynamic -o hell-dlopener main.o

    Windows上に-export-dynamicを使わなくて、関数の前にG_MODULE_EXPORTを付けば、関数をクスポートできます。


  • GTK+ and Glade3 GUI Programming Tutorial - Part 3


GGCで-export-dynamicで関数をエクスポートする時、不用意にすべての関数が外から参照できるようになってます。これを解消するため、Why is the new C++ visibility support so useful?に説明した遣り方で指定した関数だけをエクスポートできるようになります。
  1. コンパイル
    gcc -Wall -g -o hello hello.c -export-dynamic -fvisibility=hidden `pkg-config --cflags --libs gtk+-2.0`

  2. エクスポート関数の前に追加:
    __attribute__ ((visibility("default")))

    或いはエクスポート関数の前後に追加:
    #pragma GCC visibility push(default)
    extern void exportfunct(int);
    #pragma GCC visibility pop

0 件のコメント: