ubuntuusers.de

gtkhtml einbinden [cpp]

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

frank-w

Anmeldungsdatum:
30. September 2008

Beiträge: 419

Hallo,

ich möchte in meinem Programm gtkhtml einbinden, um einfache html-seiten anzuzeigen.leider klappt das mit dem linken nicht so ganz:

1
2
3
$ gcc -Wall -g -o html gtk_htmlview.cxx $(pkg-config --cflags --libs gtk+-2.0 libgtkhtml-2.0)
gtk_htmlview.cxx: In function ‘int main(int, char**)’:
gtk_htmlview.cxx:63: error: ‘gtk_html_new_from_string’ was not declared in this scope

die Quellcode-Datei (Beispielprogramm aufs nötigste reduziert)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <gtk/gtk.h>
//#include <gtkhtml/gtkhtml.h> //for gtkhtml-3
#include <libgtkhtml/gtkhtml.h> //for gtkhtml-2

static gboolean delete_event( GtkWidget *widget,
                              GdkEvent  *event,
                              gpointer   data )
{
    /* If you return FALSE in the "delete-event" signal handler,
     * GTK will emit the "destroy" signal. Returning TRUE means
     * you don't want the window to be destroyed.
     * This is useful for popping up 'are you sure you want to quit?'
     * type dialogs. */

    g_print ("delete event occurred\n");

    /* Change TRUE to FALSE and the main window will be destroyed with
     * a "delete-event". */

    return TRUE;
}

/* Another callback */
static void destroy( GtkWidget *widget,
                     gpointer   data )
{
    gtk_main_quit ();
}

int main( int   argc,
          char *argv[] )
{
    /* GtkWidget is the storage type for widgets */
    GtkWidget *window;
    GtkWidget *view;
    
    /* This is called in all GTK applications. Arguments are parsed
     * from the command line and are returned to the application. */
    gtk_init (&argc, &argv);
    
    /* create a new window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    
    /* When the window is given the "delete-event" signal (this is given
     * by the window manager, usually by the "close" option, or on the
     * titlebar), we ask it to call the delete_event () function
     * as defined above. The data passed to the callback
     * function is NULL and is ignored in the callback function. */
    g_signal_connect (window, "delete-event",
		      G_CALLBACK (delete_event), NULL);
    
    /* Here we connect the "destroy" event to a signal handler.  
     * This event occurs when we call gtk_widget_destroy() on the window,
     * or if we return FALSE in the "delete-event" callback. */
    g_signal_connect (window, "destroy",
		      G_CALLBACK (destroy), NULL);
    
    /* Sets the border width of the window. */
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    
    /* Creates htmlview */
    //view = gtk_html_new_from_string ("<HTML><BODY><H1>Hello World</H1></BODY></HTML>", -1);
    view = html_view_new(); //gtkhtml2
    /* This packs the button into the window (a gtk container). */
    gtk_container_add (GTK_CONTAINER (window), view);
    
    /* The final step is to display this newly created widget. */
    gtk_widget_show (view);
    
    /* and the window */
    gtk_widget_show (window);
    
    /* All GTK applications must have a gtk_main(). Control ends here
     * and waits for an event to occur (like a key press or
     * mouse event). */
    gtk_main ();
    
    return 0;
}

die Ausgabe von pkgconfig ("-I/usr/include/gtkhtml-2.0" und "-lgtkhtml-2" vorhanden)

1
2
echo $(pkg-config --cflags --libs gtk+-2.0 libgtkhtml-2.0)
-pthread -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/gtkhtml-2.0 -I/usr/include/libxml2 -pthread -lgtkhtml-2 -lgtk-x11-2.0 -lxml2 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0

Hat jemand eine Idee?

//edit: view = html_view_new bei gtkhtml2

Gruß Frank

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

frank-w schrieb:

leider klappt das mit dem linken nicht so ganz:

Bin kein C oder C++ Geek, aber die Fehlermeldung spricht meiner Meinung nach eher für einen Compiler-Fehler und nicht für ein Problem beim Linken.

1
2
3
$ gcc -Wall -g -o html gtk_htmlview.cxx $(pkg-config --cflags --libs gtk+-2.0 libgtkhtml-2.0)
gtk_htmlview.cxx: In function ‘int main(int, char**)’:
gtk_htmlview.cxx:63: error: ‘gtk_html_new_from_string’ was not declared in this scope

Ich nehme an, die Funktion ist nicht deklariert; dass heißt die Funktions-Deklaration wird nicht inkludiert. Du musst wissen, welcher Header die Funktion deklariert und sicher stellen, dass der Header inkludiert wird.

1
echo $(pkg-config --cflags --libs gtk+-2.0 libgtkhtml-2.0)

'echo $(...)' ist kein intelligentes Konstrukt. Durch $(...) wird die Standard-Ausgabe des Prozesses in die Shell gepipt und durch 'echo' dann wieder zurück zur Standard-Ausgabe. Das ist ein unnötiger Umweg; lass sowohl 'echo' als auch '$(...)' weg.

frank-w

(Themenstarter)

Anmeldungsdatum:
30. September 2008

Beiträge: 419

oh, die Fehlermeldung habe ich auch vergessen zu ersetzen...(hab zwischendurch mit gtkhtml3 rumprobiert)

1
2
3
$ gcc -Wall -g -o html gtk_htmlview.cxx $(pkg-config --cflags --libs gtk+-2.0 libgtkhtml-2.0)
/tmp/ccL4yzMp.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

gleiches bei gtkhtml3

vinho

Anmeldungsdatum:
10. September 2010

Beiträge: 91

frank-w schrieb:

Hallo,

ich möchte in meinem Programm gtkhtml einbinden, um einfache html-seiten anzuzeigen.

Warum willst du eigentlich das veraltete und nicht mehr gemaintainte gtkhtml benutzen statt WebKitGTK+?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <gtk/gtk.h>
#include <webkit/webkit.h>

int main (int argc, char **argv)
{
	GtkWidget *window;
	GtkWidget *scroll;
	GtkWidget *web_view;

	gtk_init (&argc, &argv);
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
	g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
	scroll = gtk_scrolled_window_new (NULL, NULL);
	web_view = webkit_web_view_new ();
	gtk_container_add (GTK_CONTAINER (scroll), web_view);
	gtk_container_add (GTK_CONTAINER (window), scroll);
	webkit_web_view_open (WEBKIT_WEB_VIEW (web_view), "http://www.google.com/");
	gtk_widget_show_all (window);
	gtk_main ();

	return 0;
}

Kompilieren:

gcc -o browser browser.c $(pkg-config webkit-1.0 --cflags --libs)

Oder noch besser mit GTK+ 3.0 und WebKitGTK+ 3.0:

gcc -o browser browser.c $(pkg-config webkitgtk-3.0 --cflags --libs)

frank-w

(Themenstarter)

Anmeldungsdatum:
30. September 2008

Beiträge: 419

vinho schrieb:

Warum willst du eigentlich das veraltete und nicht mehr gemaintainte gtkhtml benutzen statt WebKitGTK+?

weil ich einfachstes html (formatierten Text) brauche (kein Javascript,layer, etc) denke da ist webkit bisschen wie mit Kanonen auf Spatzen zu schießen.

vinho schrieb:

Oder noch besser mit GTK+ 3.0 und WebKitGTK+ 3.0:

Gtk3 ist bei den meisten Distributionen noch nicht standard, oder?

Danke für dein Beipiel...

Gruß Frank

Antworten |