Ayuda: Problemas al usar la libreria GtkHtml

Buenas, estoy haciendo una aplicación que sea multidioma. Y tengo que mostrar un texto a traducir que muestre una de las palabras en un color determinado. Como es posible que a la hora de traducir, la palabra no se encuentre siempre en la misma posición no puedo dividir la frase en varias y aplicar propiedades diferentes a los diferentes tags. Por lo que la opción mejor es la de interpretar el texto como html.

El caso es que creo, a diferencia de QT, Gtk no resuelve este problema y no interpreta el texto html.

El caso es que he encontrado dos posibles soluciones: gtkhtml y gecko, pero ambas carecen de mucha documentación y me ha surgido un problema al intentar compilar la primera.

Estoy usando autotools para manejar las dependecias y he definido las librerias y cflags de esta forma:

configure.in
PKG_CHECK_MODULES(GTKMM, [gtkmm-2.4 gthread-2.0 libgtkhtml-3.14])
AC_SUBST(GTKMM_CFLAGS)
AC_SUBST(GTKMM_LIBS)


src/Makefile.am
aplicacion_LDADD = $(GTKMM_LIBS)
AM_CPPFLAGS = $(GTKMM_CFLAGS)


src/main.cpp
#include <gtkmm.h>
#include <config.h>
#include <gnome.h>
#include <gtkhtml/gtkhtml.h>

int main (int argc, char *argv[])
{
   GtkWidget *app;
   GtkWidget *html;
   GtkWidget *scrolled_window;

   gnome_init ("PACKAGE_NAME", "PACKAGE_VERSION", argc, argv);

   html = gtk_html_new();

   return 0;
}


El problema es que a la hora de enlazar las librerías, lo hace mal y no encuentra las funciones, da este error:

undefined reference to `gtk_html_new()'
collect2: ld returned 1 exit status


A ver si alguien ha tenido un error parecido, o me puede decir donde encontrar documentación de gecko o gtkhml.

Un saludo y gracias.
Pega la línea que está ejecutando make para enlazar ese binario.

- ferdy
gcc -o prueba main.cpp -DORBIT2=1 -pthread -I/usr/include/libgtkhtml-3.14
-I/usr/include/libgnomeui-2.0 -I/usr/include/gtk-unix-print-2.0
-I/usr/include/libglade-2.0 -I/usr/include/libgnome-2.0
-I/usr/include/libgnomecanvas-2.0 -I/usr/include/gtk-2.0 -I/usr/include/libart-2.0
-I/usr/include/gconf/2 -I/usr/include/libbonoboui-2.0 -I/usr/include/gnome-vfs-2.0
-I/usr/lib/gnome-vfs-2.0/include -I/usr/include/gnome-keyring-1
-I/usr/include/orbit-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
-I/usr/include/libbonobo-2.0 -I/usr/include/bonobo-activation-2.0
-I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/lib/gtk-2.0/include
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/libpng12
-I/usr/include/libxml2  -Wl,--export-dynamic -pthread -lgtkhtml-3.14 -lgnomeui-2
-lSM -lICE -lglade-2.0 -lbonoboui-2 -lgnomevfs-2 -lgnome-keyring -lgnomecanvas-2
-lgnome-2 -lpopt -lart_lgpl_2 -lpangoft2-1.0 -lbonobo-2 -lbonobo-activation
-lgconf-2 -lORBit-2 -lgthread-2.0 -lrt -lgtk-x11-2.0 -lxml2 -lgdk-x11-2.0 -latk-1.0
-lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi
-lXrandr -lXcursor -lXfixes -lpango-1.0 -lcairo -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl
-lglib-2.0


Gracias.

Un saludo.
nm /usr/lib/libgtkhtml-3.14.so please
$ nm /usr/lib/libgtkhtml-3.14.so
nm: /usr/lib/libgtkhtml-3.14.so: no symbols


Gracias Ferdy.

Un saludo.
Tendrás que pegar la salida correspondiente a esa librería..... ese fichero será un enlace a la real.

- ferdy
Lo siento, pero no entiendo cómo funciona nm.

Te dejo la salida de todo:
$ ls -la /usr/lib/ | grep libgtkhtml
-rw-r--r--   1 root root   973120 2007-04-10 00:48 libgtkhtml-3.14.a
lrwxrwxrwx   1 root root       25 2007-10-01 21:14 libgtkhtml-3.14.so -> libgtkhtml-3.14.so.19.0.0
lrwxrwxrwx   1 root root       25 2007-10-01 21:14 libgtkhtml-3.14.so.19 -> libgtkhtml-3.14.so.19.0.0
-rw-r--r--   1 root root   655956 2007-04-10 00:48 libgtkhtml-3.14.so.19.0.0

$ nm /usr/lib/libgtkhtml-3.14.so
nm: /usr/lib/libgtkhtml-3.14.so: no symbols
$ nm /usr/lib/libgtkhtml-3.14.so.19
nm: /usr/lib/libgtkhtml-3.14.so.19: no symbols
$ nm /usr/lib/libgtkhtml-3.14.so.19.0.0
nm: /usr/lib/libgtkhtml-3.14.so.19.0.0: no symbols



El texto de salida de nm /usr/lib/libgtkhtml-3.14.a te lo adjunto en un txt que es muy largo.

Un saludo.

Adjuntos

Eso es que hay algo que se ha instalado mal.... esa librería debería exportar símbolos (entre ellos, gtk_html_new).

- ferdy
Ferdy escribió:Eso es que hay algo que se ha instalado mal.... esa librería debería exportar símbolos (entre ellos, gtk_html_new).

- ferdy


Me pasa tanto en el ordenador de casa como en el del trabajo. Estoy en una Ubuntu y he probado con varios paquetes de la misma librería en diferentes versiones.

La librería de forma estática sí que exporta todos esos símbolos.

Probaré a compilarla por mi mismo.

Gracias.

Un saludo.

Edit:

Haciendo nm *.so, ninguna de las librerías exporta nada. Sólo lo hacen si son estáticas.
Ehm... claro.... 'nm -D' ... no se en qué estaría pensando.

- ferdy
$ nm -D libgtkhtml-3.14.so | grep gtk_html_new
00026240 T gtk_html_new
00025cf0 T gtk_html_new_from_string


La salida entera en el tgz.

Un saludo.

Edit:

Ya he encontrado el problema, compilo con g++ en vez de gcc.

Si necesito utilizar esta librería orientada a objetos, ¿cómo puedo hacerlo? ¿Por qué es incompatible al ser compilada con g++?

Voy a buscar información al respecto.

Edit2:

Ya he encontrado la solución, encapsular los includes de esta forma:

gtkhtml_cpp.h
extern "C"
{
   #include <gtkhtml/gtkhml.h>
}



y luego en cualquier fuente #include "gtkhtml_cpp.h".

Aunque estoy buscando la razón por la que hay que hacerlo.
Gracias.
10 respuestas