Discussion:
Acceso a librerías
(demasiado antiguo para responder)
Jonas
2005-06-14 19:58:09 UTC
Permalink
¿Cómo acceder a una función de una librería en linux?


$ ar t /usr/lib/modules/libddc.a
xf86DDC.o edid.o interpret_edid.o print_edid.o interpret_vdif.o
print_vdif.o ddcProperty.o

Yo quiero acceder p.e. a la función 'print_vendor' print_edid.o
http://cvs.freedesktop.org/xorg/xc/programs/Xserver/hw/xfree86/ddc/print_edid.c?rev=1.2.18.1&view=markup
Luis Araujo
2005-06-15 08:11:02 UTC
Permalink
Post by Jonas
¿Cómo acceder a una función de una librería en linux?
$ ar t /usr/lib/modules/libddc.a
xf86DDC.o edid.o interpret_edid.o print_edid.o interpret_vdif.o
print_vdif.o ddcProperty.o
Yo quiero acceder p.e. a la función 'print_vendor' print_edid.o
http://cvs.freedesktop.org/xorg/xc/programs/Xserver/hw/xfree86/ddc/print_edid.c?rev=1.2.18.1&view=markup
Incluye el archivo de cabecera que haga referencia a esa libreria.

Y luego enlaza (en este caso, estáticamente) a la libreria
libddc.a.
Jonas
2005-06-15 10:24:53 UTC
Permalink
Post by Luis Araujo
Post by Jonas
¿Cómo acceder a una función de una librería en linux?
$ ar t /usr/lib/modules/libddc.a
xf86DDC.o edid.o interpret_edid.o print_edid.o interpret_vdif.o
print_vdif.o ddcProperty.o
Yo quiero acceder p.e. a la función 'print_vendor' print_edid.o
http://cvs.freedesktop.org/xorg/xc/programs/Xserver/hw/xfree86/ddc/print_edid.c?rev=1.2.18.1&view=markup
Incluye el archivo de cabecera que haga referencia a esa libreria.
Y luego enlaza (en este caso, estáticamente) a la libreria
libddc.a.
Para enlazar estáticamente hago esto:
$ cc test.c -o test -L/usr/lib/modules/ -lddc

Pero el problema es que no puedo incluir ese archivo de cabecera puesto
que no existe.

Esos ficheros son borrados una vez que XFree86/X.org ha sido compilado.

¿No se puede acceder a una función de esa librería simplemente haciendo
uel enlace estático?
Antoine Leca
2005-06-15 14:36:20 UTC
Permalink
Post by Jonas
¿Cómo acceder a una función de una librería en linux?
Yo quiero acceder p.e. a la función 'print_vendor' print_edid.o
http://cvs.freedesktop.org/xorg/xc/programs/Xserver/hw/xfree86/ddc/print_edid.c?rev=1.2.18.1&view=markup

static void print_vendor(int scrnIndex, struct vendor *);
^^^^^^

Este función NO es visible desde fuera; entonces NO es posible (salvo
recompilar X11 borrando este 'static', o hacer salvajerías con los
simbolos).

Lo puedes comprobar con nm

static void
print_vendor(int scrnIndex, struct vendor *c)
{
xf86DrvMsg(scrnIndex, X_INFO,
"Manufacturer: %s Model: %x Serial#: %u\n",
(char *)&c->name, c->prod_id, c->serial);
xf86DrvMsg(scrnIndex, X_INFO,
"Year: %u Week: %u\n", c->year, c->week);
}

Pero lo que hace es bastante senzillo, entonces puedes copiar este trozito
de código dentro de tu programa, a ver lo que pasa... De hecho, sin conocer
nada al arquitectura de este módulo, me parece que este función necesita una
estructura vendor ya rellenada, y solo se trata de imprimir las
informaciones.

Ahora bién, necesitarás encontrar los .h utilizados por este archivo fuente,
por tener la descripción de struct vendor. Pero si ya tienes la estructura
rellenada, supongo que ya lo tienes todo eso, ¿no?


Antoine

Loading...