PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Input.h undefined reference



CrazyJo
05-03-2008, 15:55
Hi.
Ich habe folgendes Problem. Ich versuche der Maus ein Event zu übermitteln das sie den Zeiger an eine bestimmte position setzt. Um das zu realisieren hab ich ein programm in c entworfen:



...
#include <linux/input.h>
...
int main(void)
{
.....
input_report_abs(dev, ABS_X, x);
input_report_abs(dev, ABS_Y, y);
.....
}

Nun bekomme ich folgende Fehlermeldungen:



Kompilieren der Datei test.c (gcc)
Linken der Datei test (gcc)
test.o: In function `main':
undefined reference to `input_report_abs'
undefined reference to `input_report_abs'
collect2: ld returned 1 exit status

Die Funktionen sind in der Header soweit aufgelistet. Die Konstanten ABS_X und Y werden auch über die Header gefunden. Meine Frage ist wieso er nicht die Funktionen findet. Wie kann ich die Funktionen endlich nutzen? Oder gibt es da alternativ Funktionen ? Danke für die Hilfe.

panzi
05-03-2008, 16:14
Ich schätze du musst noch gegen irgendeine lib linken, wenn der Linker schreit. Gegen welche weiß ich auch net.

CrazyJo
06-03-2008, 07:18
Das hatte ich mir auch schon fast gedacht. aber da hört mein wissen auch auf welche das sein könnte.

almoeli
06-03-2008, 15:59
Hi,

da du die Funktion über einen Kernel Header (weil im Unterverzeichnis linux/) benutzt, gehe ich stark davon aus, dass du versuchst mit einem Programm für den User Space eine Funktion im Kernel zu rufen.
Direkte Aufrufe von Kernelfunktionen aus normalen User Space Programmen sind nicht möglich. Dies geht nur aus Kernelmodulen.
Deshalb gibt es auch keine Lib, in der die Funktion zu finden ist.
Du musst die Maus über die Gerätedateien /dev/input/mice usw. mit read und write ansprechen.

Gruß

almoeli

BLUESCREEN3D
07-03-2008, 17:21
Du musst die Maus über die Gerätedateien /dev/input/mice usw. mit read und write ansprechen.
Das geht aber nur als root ...

Stattdessen kann man z.B. die Xlib verwenden:

#include <X11/Xlib.h>
...
Display *display = XOpenDisplay(NULL);
Window window = XDefaultRootWindow(display);
XWarpPointer(display, None, window, 0, 0, 0, 0, x, y);
XFlush(display);
XCloseDisplay(display);
Das ganze natürlich noch erweitern um eine Prüfung aller Funktionsrückgabewerte auf Fehler.
Kompilieren mit Parameter -lX11