ulogd kompilieren

fanste

Erfahrenes Mitglied
Wenn du mir sagst, was ich dazu alles gebrauche, werde ich Cygwin neu installieren. Bei der Installation kann man einiges auswählen, was dann nachgeladen wird. Werde dann schauen, ob das dabei ist.
 

Dennis Wronka

Soulcollector
Wie gesagt, Du benoetigst dafuer die Kernel-Header. Keine Ahnung ob die fuer Cygwin verfuegbar sind. Ist schon eine ganze Weile her, dass ich mal mit Cygwin rumgespielt hab.
 

deepthroat

Erfahrenes Mitglied
fanste hat gesagt.:
Beim kompilieren eines ganzen Programmpacketes (Name: ds-mod), habe ich das wunderbar unter Win mit Cygwin kompilieren können. Mit gcc.
Irgendwie scheine ich mich wohl unklar ausgedrückt zu haben. Also nochmal die Frage: Was hast du denn mit dem Programm vor? Wo soll es denn laufen (unter welchem Betriebssystem)?

Nochmal: Der GCC von Cygwin erstellt PE Dateien die unter Linux nicht nativ ausgeführt werden können, da Linux normalerweise nur a.out und ELF Binärdateien unterstützt.

Bei Cygwin habe ich auf der Paketliste keine Linux Kernel Header gesehen. Da aber Cygwin auch keinen Kernel benötigt und man somit auch keine Kernel-Module oder ähnliches auf/mit Cygwin laufen lassen kann ist das net weiter verwunderlich.

Gruß
 

fanste

Erfahrenes Mitglied
Ok. Habe mir jetzt mal Suse Linux 10 aufgesetzt. Aber auch hier läuft es nicht ganz durch., scheint mir aber eher ein Programmierfehler zu sein.

Code:
/tmp/ccVrisHs.o: In function `load_plugin':
/media/MEDION/linux/ulogd-1.24/ulogd.c:460: undefined reference to `dlopen'
/media/MEDION/linux/ulogd-1.24/ulogd.c:461: undefined reference to `dlerror'
collect2: ld returned 1 exit status
make: *** [ulogd] Error 1

Kann ich was dagegen machen, oder muss ich eine ältere Version verwenden?
 

Dennis Wronka

Soulcollector
Ich glaub auch in diesem Fall eher, dass in Deinem System was fehlt.
Bei mir werden sowohl ULogD 1.24 als auch 2.00Beta1 ohne Probleme. Letztere Version braucht zwar noch ein paar Libraries, aber fuer 1.24 musste ich nichts zusaetzlich installieren.

Probier mal folgenden Make-Aufruf:
Bash:
make LDFLAGS="-ldl"
 

fanste

Erfahrenes Mitglied
Hat sich leider nichts geändert. Ich wüsste jetzt auch nicht, welche Libs ich noch dazu installieren soll. Habe jetzt mal ein paar von der Linux CD installiert. Aber wie gesagt, keine Veränderung.
 

deepthroat

Erfahrenes Mitglied
Hi.

Manchmal werden die Make Variablen bei autoconf Projekten nicht mehr beim make Aufruf übernommen. Versuch mal die Variable beim configure Aufruf zu setzen:
Bash:
LDFLAGS=-ldl ./configure

Alternativ kannst du auch die letzte Zeile vor den Fehlermeldungen der Make-Ausgabe (wo der konkrete Kompileraufruf steht) kopieren, einfügen, die Option -ldl hinzufügen und dann in der Shell ausführen. Dazu mußt du evtl. noch in ein Unterverzeichnis wechseln.

Gruß
 

fanste

Erfahrenes Mitglied
Moin,

Also: Ersteres habe ich ausprobiert. Gleicher Fehler. Das zweite blick ich nicht so ganz.

Hier mal der Aufruf des Kompilers, wenn ich "make install" eingebe. Vll hilft euch ja das.
Code:
gcc -g -O2  -Wall -DULOGD_CONFIGFILE=\"/usr/local/etc/ulogd.conf\" -I/lib/modules/`uname -r`/build/include -I./libipulog/include -I./include -rdynamic ulogd.c conffile/conffile.o ./libipulog/libipulog.a -o ulogd
/tmp/ccdWVWOF.o: In function `load_plugin':

#Und das sind die zwei Fehler.
/media/MEDION/linux/ulogd-1.24/ulogd.c:460: undefined reference to `dlopen'
/media/MEDION/linux/ulogd-1.24/ulogd.c:461: undefined reference to `dlerror'

Und dann noch eine Frage, die nicht direkt etwas damit zu tun hat.
Ich habe mal angefangen mich über die Kernel (-modul)programmierung schlau zu machen. Habe dabei folgenden Code ausprobiert.
C++:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/version.h>
//#include <linux/kernel.h> //nachträglich hinzugefügt
#include <linux/fs.h>

MODULE_AUTHOR("Stefan Grubisic");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Hallo Welt");

static int __init ModInit(void)
{
   printk("Funktion 'ini_ module' wurde aufgerufen!");

   return 0;
}

static void __exit ModExit(void)
{
   printk("Funktion 'cleanup_module' wurde aufgerufen!");
}

module_init(ModInit);
module_exit(ModExit);

Kompilieren geht wunderbar. Kommt am Ende eine Datei namens hello.o mit einer Größe von 1,4 KB raus.
Wenn ich die Datei dann jetzt aber per "insmod hello.o" einbinden will, kommt immer dieser Fehler:
Code:
linux:/media/MEDION/linux # insmod hello.o

insmod: error inserting 'hello.o': -1 Invalid module format
Aber warum funktioniert das nicht? Ich habe den Code anhand eines Tutorials erstellt. Das Selbe passiert auch mit Codebeispielen aus anderen Tutorials.

Gruß und gute Nacht
 

deepthroat

Erfahrenes Mitglied
Hi
fanste hat gesagt.:
Hier mal der Aufruf des Kompilers, wenn ich "make install" eingebe. Vll hilft euch ja das.
Code:
gcc -g -O2  -Wall -DULOGD_CONFIGFILE=\"/usr/local/etc/ulogd.conf\" -I/lib/modules/`uname -r`/build/include -I./libipulog/include -I./include -rdynamic ulogd.c conffile/conffile.o ./libipulog/libipulog.a -o ulogd
Dann gib einfach ein
Code:
gcc -g -O2  -Wall -DULOGD_CONFIGFILE=\"/usr/local/etc/ulogd.conf\" -I/lib/modules/`uname -r`/build/include -I./libipulog/include -I./include -rdynamic ulogd.c conffile/conffile.o ./libipulog/libipulog.a -o ulogd -ldl
fanste hat gesagt.:
Und dann noch eine Frage, die nicht direkt etwas damit zu tun hat.
Ich habe mal angefangen mich über die Kernel (-modul)programmierung schlau zu machen. Habe dabei folgenden Code ausprobiert.

Kompilieren geht wunderbar. Kommt am Ende eine Datei namens hello.o mit einer Größe von 1,4 KB raus.
Wenn ich die Datei dann jetzt aber per "insmod hello.o" einbinden will, kommt immer dieser Fehler:
Code:
linux:/media/MEDION/linux # insmod hello.o

insmod: error inserting 'hello.o': -1 Invalid module format
Aber warum funktioniert das nicht? Ich habe den Code anhand eines Tutorials erstellt. Das Selbe passiert auch mit Codebeispielen aus anderen Tutorials.
Das liegt daran das die Tutorials für Versionen <= 2.4 geschrieben sind. Im 2.6er Kernel haben die Module eine andere Endung und einen anderen Aufbau. Zum Kompilieren siehe http://www.captain.at/programming/kernel-2.6/

Gruß
 

fanste

Erfahrenes Mitglied
OK. Werde ich testen, sobald ich Linux zur Hand habe.

Beim Kernel Modul kommt es im Prinzip nur auf das Makefile an, so wie ich das sehe, oder?