gimp plugin compilieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
heliosoph
Beiträge: 455
Registriert: 28.03.2005 15:48:04
Wohnort: Neustadt / Aisch
Kontaktdaten:

gimp plugin compilieren

Beitrag von heliosoph » 08.05.2005 18:36:16

Hallo,

Ich habe zwei Fragen zum Thema Compilieren von Gimp Plugins. Sind wahrscheinlich absolute Anfängerfehler, weil dies mein erster Versch ist ...

Ich habe mir Gimp2.26 installiert und will ein Plugin dafür schreiben. Da ich noch keine Programmiererfahrung in C habe, habe ich mit einem bestehenden Plugin angefangen und versucht, den Quelltext zu compilieren.

Hier stecke ich jetzt fest, weil gcc die Bibliotheken nicht findet, die zu Gimp gehören.

Mein System: Sarge. Ich habe alle zu Gimp gehörigen Bibliotheken installiert (auch die, die der Compiler nicht findet). Ich habe alles standardmäßig mit apt-get installiert und sonst nichts dran verändert.

Das Plugin beginnt wie folgt:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
#include <libgimp/gimpcompat.h>
stdio.h und stdlib.h werden offensichtlich gefunden, gtk.h, gimp.h und gimpcompat.h nicht. gcc bricht ab mit der Fehlermeldung

Code: Alles auswählen

No such file or directory
Das ist also meine Frage 1: Was muß ich tun, damit die Bibliotheken richtig eingebunden werden?

Und Frage 2: Wie lautet der genaue Compileraufruf? Ich habe in verschiedenen Tutorials verschiedene Varianten gesehen, die bei mir alle ungefähr die gleichen Fehler bringen.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.05.2005 19:59:35

sind vermutlich diese Pakete:

Code: Alles auswählen

libgimp2.0-dev
libgtk2.0-dev
Falls nicht, kannst du auf dieser Seite auch nach Paketen suchen, die eine bestimmte Datei enthalten: http://www.debian.org/distrib/packages

Gruß
gms

heliosoph
Beiträge: 455
Registriert: 28.03.2005 15:48:04
Wohnort: Neustadt / Aisch
Kontaktdaten:

Beitrag von heliosoph » 08.05.2005 22:31:17

Vielen Dank für die schnelle Antwort!

Die Pakete sind alle installiert, die gesuchten Bibliotheken sind da, wo sie sein sollen. Trotzdem findet gcc die Bibliotheken nicht :-(

Viele Grüße

heliosoph

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 09.05.2005 09:26:45

Dann liegt es sicher am fehlenden Include-Path für die Compilierung:

-I/usr/include/gtk-2.0 -I/usr/include/gimp-2.0

Gruß
gms

heliosoph
Beiträge: 455
Registriert: 28.03.2005 15:48:04
Wohnort: Neustadt / Aisch
Kontaktdaten:

Beitrag von heliosoph » 09.05.2005 11:12:24

Hallo,

bin jetzt einen Schritt weiter :-)
Da hat er noch mehr Bibliotheken nicht gefunden, deswegen lautet mein Compileraufruf jetzt

Code: Alles auswählen

gcc kaleidoscope.c -o kaleidoscope -I/usr/include/gtk-2.0 -I/usr/include/gimp-2.0 -I/usr/include/glib-2.0 -I/usr/include/pango-1.0 -I/usr/lib/glib-2.0/include -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0
Da findet er sie dann alle. Stellt sich für mich die Frage, wie sich das vereinfachen läßt...

Und natürlich: Ein Schritt weiter gibt es wieder neue Probleme. Der Compiler bring massenweise Fehlermeldungen in der Form:

Code: Alles auswählen

/tmp/ccDWP8si.o(.text+0x3031): In function `dialog_cancel_callback':
: undefined reference to `gtk_widget_get_type'
/tmp/ccDWP8si.o(.text+0x303f): In function `dialog_cancel_callback':
: undefined reference to `g_type_check_instance_cast'
/tmp/ccDWP8si.o(.text+0x304a): In function `dialog_cancel_callback':
: undefined reference to `gtk_widget_destroy'
/tmp/ccDWP8si.o(.text+0x306b): In function `main':
: undefined reference to `gimp_main'
collect2: ld returned 1 exit status
Die Datei mit dem Quellcode steht in dem Verzeichnis, in dem die Plugins gespeichert sind und von dort aus rufe ich auch gcc auf.
Vielleicht kannst du mir einen Tip geben, ich wäre dir sehr dankbar. Bin halt Anfänger...

Viele Grüße

heliosoph

heliosoph
Beiträge: 455
Registriert: 28.03.2005 15:48:04
Wohnort: Neustadt / Aisch
Kontaktdaten:

Beitrag von heliosoph » 09.05.2005 11:47:14

Wieder ein Schritt weiter :-)
Aus dem gtk+ Tutorial habe ich noch den Aufruf von pkg-config eingebunden (und natürlich das Paket installiert). Dadurch sind die Fehlermeldungen wesentlich weniger geworden, passen schon fast auf einen Bildschirm ;-)

Mein Compileraufruf jetzt:

Code: Alles auswählen

gcc kaleidoscope.c -o kaleidoscope -I/usr/include/gtk-2.0 -I/usr/include/gimp-2.0 -I/usr/include/glib-2.0 -I/usr/include/pango-1.0 -I/usr/lib/glib-2.0/include -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 `pkg-config --cflags gtk+-2.0` \ `pkg-config --libs gtk+-2.0`
Die Ausgabe lautet jetzt (gekürzt):

Code: Alles auswählen

gcc:  -Wl,--export-dynamic: No such file or directory
In file included from /usr/include/glib-2.0/glib.h:52,
                 from /usr/include/gtk-2.0/gdk/gdktypes.h:32,
                 from /usr/include/gtk-2.0/gdk/gdkcolor.h:4,
                 from /usr/include/gtk-2.0/gdk/gdk.h:30,
                 from /usr/include/gtk-2.0/gtk/gtk.h:31,
                 from kaleidoscope.c:49:
/usr/include/glib-2.0/glib/gmessages.h:109: warning: `visibility' attribute directive ignored
<snip>
/usr/include/glib-2.0/gobject/gtype.h:431: warning: `visibility' attribute directive ignored
<snip>
Bleibt die Frage, wie es jetzt weitergeht...

Viele Grüße

heliosoph

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 09.05.2005 12:28:18

wenn du pkg-config verwendest, kannst du dieses auch für gimp benutzen:

Code: Alles auswählen

gcc -o kaleidoscope kaleidoscope.c `pkg-config --cflags gtk+-2.0`  `pkg-config --cflags gimp-2.0` `pkg-config --libs gtk+-2.0`  `pkg-config --libs gimp-2.0`
versuchst du ein "shared object (so)" zu erstellen ?

[edit]
wenn ja, dann solltest du ungefähr so zum Ziel kommen:

Code: Alles auswählen

gcc -o libkaleidoscope.so kaleidoscope.c -shared `pkg-config --cflags gtk+-2.0`  `pkg-config --cflags gimp-2.0` `pkg-config --libs gtk+-2.0`  `pkg-config --libs gimp-2.0`
[/edit]

Gruß
gms

heliosoph
Beiträge: 455
Registriert: 28.03.2005 15:48:04
Wohnort: Neustadt / Aisch
Kontaktdaten:

Beitrag von heliosoph » 09.05.2005 12:46:33

Dein Compiler-Aufruf funktioniert genauso wie der von mir, ist halt viel kürzer und eleganter. :-) Die Fehlermeldungen bleiben aber die gleichen wie in meinem letzten Posting. :-(

Zum Hintergrund der ganzen Aktion: Ich habe das kaleidoscope-plugin gefunden und will es verändern, weil es ungefähr das macht, was ich haben will. Das gesamte Plugin besteht im Quellcode aus einer einzigen Datei. Da habe ich mir gedacht, das ist dann noch überschaubar. Und wenn ich mit einem fertigen Programm anfange, habe ich erstmal eine funktionierende Basis. Natürlich weiß ich noch nicht, wie komplex die ganze Aktion wird...

Ich kann dir deine Frage leider nicht beantworten, weil ich (noch) nicht weiß, was ein shared object ist.

Viele Grüße

heliosoph

heliosoph
Beiträge: 455
Registriert: 28.03.2005 15:48:04
Wohnort: Neustadt / Aisch
Kontaktdaten:

Beitrag von heliosoph » 09.05.2005 12:55:40

:) :) Hab was übersehen: Bei deinem Aufruf (ohne shared object) kommt ein Fehler weniger, der Compiler erzeugt auch eine Datei :) :)

Werde dann später berichten, ob ich das plugin starten kann...

Viele Grüße

heliosoph

heliosoph
Beiträge: 455
Registriert: 28.03.2005 15:48:04
Wohnort: Neustadt / Aisch
Kontaktdaten:

Beitrag von heliosoph » 09.05.2005 19:57:09

:D :D Geht!!! :D :D

Compilieren funktioniert, das Plugin läuft. Beim Compilieren kommen zwar noch die Warnungen:

Code: Alles auswählen

/usr/include/glib-2.0/glib/gmessages.h:109: warning: `visibility' attribute directive ignored
Aber das Plugin funktioniert!

Jetzt habe ich mal eine Ausgangsbasis, die funktioniert. Dann kann ich jetzt anfangen, den Programmtext zu verstehen. Da werde ich mich sicherlich mal wieder melden.

PS: Vielleicht kann mir jemand sagen, wie ich die verbliebenen Compiler-Warnungen wegbekommen kann.

Auf jeden Fall: Vielen Dank für die Hilfe, hätte ich alleine nicht hinbekommen!

Viele Grüße

heliosoph

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 09.05.2005 20:47:18

Diese Compilerdirektive "__attribute__((visibility("hidden")))" wird anscheinend von deiner gcc-Version nicht verstanden. Meine gcc-Versionen (3.3.5 und 3.4.4) kommen jedoch damit zurecht. Poste bitte einmal die Ausgabe von "gcc --version" oder versuchs einmal mit einer neueren gcc-Version.

Gruß
gms

heliosoph
Beiträge: 455
Registriert: 28.03.2005 15:48:04
Wohnort: Neustadt / Aisch
Kontaktdaten:

Beitrag von heliosoph » 09.05.2005 23:24:16

:D :D :D Ja, jetzt gehts!!! :D :D :D

Ich habe von gcc 2.95.4 auf 3.3.5 aktualisiert und siehe da: keine Fehlermeldungen mehr!!!

@gms: Ich finds einfach obergenial, daß ich von dir so schnell und so kompetent Antworten auf meine Fragen bekommen habe. Schließlich habe ich gestern nachmittag den Thread eröffnet und heute funktioniert genau das problemlos, was ich wollte! :D

Nochmal vielen Dank und viele liebe Grüße

heliosoph

Antworten