Jonius
Ikhayateam
Anmeldungsdatum: 21. August 2009
Beiträge: 1861
Wohnort: München
|
Ich möchte für eine konkrete Anwendung das Programm metapixel anpassen. Allerdings scheitere ich bereits daran den Quelltext unverändert zu kompilieren. Es kommt zu folgender Fehlermeldung, wenn ich make ausführe:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | $ make
make -C rwimg
make[1]: Betrete Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/rwimg'
make[1]: Für das Ziel »all« ist nichts zu tun.
make[1]: Verlasse Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/rwimg'
make -C lispreader
make[1]: Betrete Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/lispreader'
make[1]: Für das Ziel »all« ist nichts zu tun.
make[1]: Verlasse Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/lispreader'
gcc -L/usr/X11R6/lib -g `pkg-config --libs glib-2.0` -o metapixel main.o bitmap.o color.o metric.o matcher.o tiling.o metapixel.o library.o classic.o collage.o search.o utils.o error.o zoom.o getopt.o getopt1.o rwimg/librwimg.a lispreader/liblispreader.a -lpng -ljpeg -lgif -lm -lz
main.o: In function `main':
/home/jonatan/.Programmierumgebung/C/metapixel/main.c:701: undefined reference to `g_strsplit'
/home/jonatan/.Programmierumgebung/C/metapixel/main.c:711: undefined reference to `g_ascii_strtod'
/home/jonatan/.Programmierumgebung/C/metapixel/main.c:713: undefined reference to `g_strfreev'
lispreader/liblispreader.a(lispreader.o): In function `lisp_read_with_allocator':
/home/jonatan/.Programmierumgebung/C/metapixel/lispreader/lispreader.c:514: undefined reference to `g_ascii_strtod'
lispreader/liblispreader.a(lispreader.o): In function `lisp_print_real':
/home/jonatan/.Programmierumgebung/C/metapixel/lispreader/lispreader.c:1059: undefined reference to `g_ascii_formatd'
collect2: ld gab 1 als Ende-Status zurück
make: *** [metapixel] Fehler 1
|
Zum Nachvollziehen, was ich gemacht habe:
| $ git clone git://github.com/schani/metapixel.git
$ cd metapixel
$ git submodule init
$ git submodule update
|
Soweit gab es keine Fehler. Ich habe dann noch im Makefile die Compileroption -fnested-functions entfernt, weil diese zu Problemen geführt hat.
Nun bekomme ich die oben genannte Fehlermeldung beim Ausführen von make. Hat jemand eine Idee, woran das liegen könnte?
|
radoe2
Anmeldungsdatum: 30. November 2006
Beiträge: 243
|
Jonius schrieb: Ich möchte für eine konkrete Anwendung das Programm metapixel anpassen. Allerdings scheitere ich bereits daran den Quelltext unverändert zu kompilieren. Es kommt zu folgender Fehlermeldung, wenn ich make ausführe:
1
2
3
4
5
6
7
8
9
10
11
12 | ....
gcc -L/usr/X11R6/lib -g `pkg-config --libs glib-2.0` -o metapixel main.o bitmap.o color.o metric.o matcher.o tiling.o metapixel.o library.o classic.o collage.o search.o utils.o error.o zoom.o getopt.o getopt1.o rwimg/librwimg.a lispreader/liblispreader.a -lpng -ljpeg -lgif -lm -lz
main.o: In function `main':
/home/jonatan/.Programmierumgebung/C/metapixel/main.c:701: undefined reference to `g_strsplit'
/home/jonatan/.Programmierumgebung/C/metapixel/main.c:711: undefined reference to `g_ascii_strtod'
/home/jonatan/.Programmierumgebung/C/metapixel/main.c:713: undefined reference to `g_strfreev'
lispreader/liblispreader.a(lispreader.o): In function `lisp_read_with_allocator':
/home/jonatan/.Programmierumgebung/C/metapixel/lispreader/lispreader.c:514: undefined reference to `g_ascii_strtod'
lispreader/liblispreader.a(lispreader.o): In function `lisp_print_real':
/home/jonatan/.Programmierumgebung/C/metapixel/lispreader/lispreader.c:1059: undefined reference to `g_ascii_formatd'
collect2: ld gab 1 als Ende-Status zurück
make: *** [metapixel] Fehler 1
|
Das sind Linkerfehler, die angemeckerten Funktionen stammen alle aus der GLIB. Hast du das Paket libglib2.0-dev installiert?
|
Jonius
Ikhayateam
(Themenstarter)
Anmeldungsdatum: 21. August 2009
Beiträge: 1861
Wohnort: München
|
radoe2 schrieb: Das sind Linkerfehler, die angemeckerten Funktionen stammen alle aus der GLIB. Hast du das Paket libglib2.0-dev installiert?
Das Paket ist installiert. Hier auch die Bestätigung:
| $ pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
|
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2505
|
Schuss ins Blaue: https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition Sprich, mal versuchen, den Call zu „pkg-config “ ans Ende zu setzen. gcc -L/usr/X11R6/lib -g -o metapixel main.o bitmap.o color.o ... `pkg-config --libs glib-2.0` Keine Garantie. Ist nur das erste, was mir da in den Sinn kommt. Vielleicht ist deine GLib-Version auch zu alt oder zu neu, um die Versionen da zu beinhalten. Müsste man mal nachschauen.
|
Jonius
Ikhayateam
(Themenstarter)
Anmeldungsdatum: 21. August 2009
Beiträge: 1861
Wohnort: München
|
Vain schrieb: Schuss ins Blaue: https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition Sprich, mal versuchen, den Call zu „pkg-config “ ans Ende zu setzen. gcc -L/usr/X11R6/lib -g -o metapixel main.o bitmap.o color.o ... `pkg-config --libs glib-2.0`
Das ganze wird über ein Makefile kompiliert. Soweit ich das überblicke steht das bereits am Ende. Hier mal das Makefile:
PREFIX = /usr/local
INSTALL = install
MANPAGE_XSL = /usr/share/xml/docbook/stylesheet/nwalsh/current/manpages/docbook.xsl
BINDIR = $(PREFIX)/bin
MANDIR = $(PREFIX)/man
VERSION = 1.1.0
DEBUG = -g
#OPTIMIZE = -O2
#PROFILE = -pg
#MACOS_LDOPTS = -L/sw/lib
#MACOS_CFLAGS = -I/usr/X11/include/libpng15
CC = gcc
CFLAGS = $(MACOS_CFLAGS) $(OPTIMIZE) $(DEBUG) $(PROFILE)
FORMATDEFS = -DRWIMG_JPEG -DRWIMG_PNG -DRWIMG_GIF
export CFLAGS CC FORMATDEFS
LDOPTS = $(MACOS_LDOPTS) -L/usr/X11R6/lib $(PROFILE) $(DEBUG) `pkg-config --libs glib-2.0`
CCOPTS = $(CFLAGS) -I/usr/X11R6/include -I/usr/X11R6/include/X11 -I. -Wall \
-DMETAPIXEL_VERSION=\"$(VERSION)\" $(FORMATDEFS) -DCONSOLE_OUTPUT `pkg-config --cflags glib-2.0`
CC = gcc
#LIBFFM = -lffm
OBJS = main.o bitmap.o color.o metric.o matcher.o tiling.o metapixel.o library.o classic.o collage.o search.o \
utils.o error.o zoom.o \
getopt.o getopt1.o
IMAGESIZE_OBJS = imagesize.o
BOREDOM_OBJS = boredom.o
all : metapixel metapixel.1 imagesize boredom
librwimg :
$(MAKE) -C rwimg
liblispreader :
$(MAKE) -C lispreader
metapixel : $(OBJS) librwimg liblispreader
$(CC) $(LDOPTS) -o metapixel $(OBJS) rwimg/librwimg.a lispreader/liblispreader.a -lpng -ljpeg -lgif $(LIBFFM) -lm -lz
metapixel.1 : metapixel.xml
xsltproc --nonet $(MANPAGE_XSL) metapixel.xml
imagesize : $(IMAGESIZE_OBJS)
$(CC) $(LDOPTS) -o imagesize $(IMAGESIZE_OBJS) rwimg/librwimg.a -lpng -ljpeg -lgif -lm -lz
boredom : $(BOREDOM_OBJS)
$(CC) $(LDOPTS) -o boredom $(BOREDOM_OBJS) rwimg/librwimg.a -lpng -ljpeg -lgif -lm -lz
zoom : zoom.c rwjpeg.c rwpng.c readimage.c writeimage.c
$(CC) -o zoom $(OPTIMIZE) $(PROFILE) $(MACOS_CCOPTS) -DTEST_ZOOM -DRWIMG_JPEG -DRWIMG_PNG \
zoom.c rwjpeg.c rwpng.c readimage.c writeimage.c $(MACOS_LDOPTS) -lpng -ljpeg -lm -lz
%.o : %.c
$(CC) $(CCOPTS) -c $<
TAGS :
etags `find . -name '*.c' -o -name '*.h'`
install : metapixel metapixel.1
$(INSTALL) -d $(BINDIR)
$(INSTALL) metapixel $(BINDIR)
$(INSTALL) metapixel-prepare $(BINDIR)
$(INSTALL) metapixel.1 $(MANDIR)/man1
# $(INSTALL) imagesize $(BINDIR)
# $(INSTALL) sizesort $(BINDIR)
clean :
rm -f *.o metapixel imagesize boredom *~
$(MAKE) -C rwimg clean
$(MAKE) -C lispreader clean
realclean : clean
rm -f metapixel.1
dist : metapixel.1
rm -rf metapixel-$(VERSION)
mkdir metapixel-$(VERSION)
cp Makefile README NEWS COPYING *.[ch] metapixel-prepare sizesort metapixel.xml metapixel.1 metapixelrc \
metapixel-$(VERSION)/
tar -zcvf metapixel-$(VERSION).tar.gz metapixel-$(VERSION)
rm -rf metapixel-$(VERSION) Vielleicht ist deine GLib-Version auch zu alt oder zu neu, um die Versionen da zu beinhalten. Müsste man mal nachschauen.
Wo schaut man das nach?
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2505
|
Jonius schrieb: Soweit ich das überblicke steht das bereits am Ende.
Es steht am Ende von „$LDOPTS “ und „$CCOPTS “, aber nicht am Ende des
gcc-Aufrufs. # Okay:
LDOPTS = $(MACOS_LDOPTS) -L/usr/X11R6/lib $(PROFILE) $(DEBUG) `pkg-config --libs glib-2.0`
CCOPTS = $(CFLAGS) -I/usr/X11R6/include -I/usr/X11R6/include/X11 -I. -Wall \
-DMETAPIXEL_VERSION=\"$(VERSION)\" $(FORMATDEFS) -DCONSOLE_OUTPUT `pkg-config --cflags glib-2.0`
# ...
# Geändert:
metapixel : $(OBJS) librwimg liblispreader
$(CC) -o metapixel $(OBJS) rwimg/librwimg.a lispreader/liblispreader.a -lpng -ljpeg -lgif $(LIBFFM) -lm -lz $(LDOPTS)
# ...
# Geändert:
imagesize : $(IMAGESIZE_OBJS)
$(CC) -o imagesize $(IMAGESIZE_OBJS) rwimg/librwimg.a -lpng -ljpeg -lgif -lm -lz $(LDOPTS)
# Geändert:
boredom : $(BOREDOM_OBJS)
$(CC) -o boredom $(BOREDOM_OBJS) rwimg/librwimg.a -lpng -ljpeg -lgif -lm -lz $(LDOPTS)
# ...
# Geändert:
%.o : %.c
$(CC) -c $< $(CCOPTS)
# ... Vielleicht ist deine GLib-Version auch zu alt oder zu neu, um die
Versionen da zu beinhalten. Müsste man mal nachschauen.
Wo schaut man das nach?
In der Doku zur GLib.
Zum Beispiel g_strsplit. Aber da steht schon gar kein „since“ mehr (wie
bei „g_strsplit_set “ darunter zum Beispiel), also nehme ich an, dass
es die Funktion schon echt lange gibt. Glaube nicht, dass das das
Problem ist.
|
Jonius
Ikhayateam
(Themenstarter)
Anmeldungsdatum: 21. August 2009
Beiträge: 1861
Wohnort: München
|
Vain schrieb: Jonius schrieb: Soweit ich das überblicke steht das bereits am Ende.
Es steht am Ende von „$LDOPTS “ und „$CCOPTS “, aber nicht am Ende des
gcc-Aufrufs. # Okay:
LDOPTS = $(MACOS_LDOPTS) -L/usr/X11R6/lib $(PROFILE) $(DEBUG) `pkg-config --libs glib-2.0`
CCOPTS = $(CFLAGS) -I/usr/X11R6/include -I/usr/X11R6/include/X11 -I. -Wall \
-DMETAPIXEL_VERSION=\"$(VERSION)\" $(FORMATDEFS) -DCONSOLE_OUTPUT `pkg-config --cflags glib-2.0`
# ...
# Geändert:
metapixel : $(OBJS) librwimg liblispreader
$(CC) -o metapixel $(OBJS) rwimg/librwimg.a lispreader/liblispreader.a -lpng -ljpeg -lgif $(LIBFFM) -lm -lz $(LDOPTS)
# ...
# Geändert:
imagesize : $(IMAGESIZE_OBJS)
$(CC) -o imagesize $(IMAGESIZE_OBJS) rwimg/librwimg.a -lpng -ljpeg -lgif -lm -lz $(LDOPTS)
# Geändert:
boredom : $(BOREDOM_OBJS)
$(CC) -o boredom $(BOREDOM_OBJS) rwimg/librwimg.a -lpng -ljpeg -lgif -lm -lz $(LDOPTS)
# ...
# Geändert:
%.o : %.c
$(CC) -c $< $(CCOPTS)
# ...
Es scheint fast so, als hätte es das Problem behoben. Dafür bekomme ich eine andere Fehlermeldung:
1
2
3
4
5
6
7
8
9
10
11
12
13 | make
make -C rwimg
make[1]: Betrete Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/rwimg'
make[1]: Für das Ziel »all« ist nichts zu tun.
make[1]: Verlasse Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/rwimg'
make -C lispreader
make[1]: Betrete Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/lispreader'
make[1]: Für das Ziel »all« ist nichts zu tun.
make[1]: Verlasse Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/lispreader'
gcc -o metapixel main.o bitmap.o color.o metric.o matcher.o tiling.o metapixel.o library.o classic.o collage.o search.o utils.o error.o zoom.o getopt.o getopt1.o rwimg/librwimg.a lispreader/liblispreader.a -lpng -ljpeg -lgif -lm -lz -L/usr/X11R6/lib -g `pkg-config --libs glib-2.0`
xsltproc --nonet /usr/share/xml/docbook/stylesheet/nwalsh/current/manpages/docbook.xsl metapixel.xml
make: xsltproc: Kommando nicht gefunden
make: *** [metapixel.1] Fehler 127
|
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2505
|
Dann brauchst du wohl das passende Paket: http://packages.ubuntu.com/precise/xsltproc Es stellt sich übrigens auch mir die Frage, was bei Ubuntu/Debian der goldene Weg ist, um ein existierendes Paket anzupassen. Ich musste mich damit noch nie beschäftigen, weil ich das in Arch komfortabel über das ABS machen kann (PKGBUILD aus dem Tree kopieren, eigenen Patch schreiben, ins PKGBUILD einfügen, „makepkg -sirc “, fertig – um Abhängigkeiten kümmert er sich, Patches der Distribution sind schon dabei usw.). Ich dachte zuerst, dass dein Problem ganz leicht lösbar ist. Wenn du jetzt aber nach und nach vom einen ins andere Problem läufst (wer weiß, was als nächstes kommt), dann bin ich mal lieber still, bevor ich dich in falsche Richtungen lenke. Das Anpassen von Paketen bei Ubuntu muss doch auch irgendwie „sauber“ funktionieren, ohne diese Frickelei. Das weiß bestimmt einer der „richtigen“ Ubuntu-User hier. ☺
|
Jonius
Ikhayateam
(Themenstarter)
Anmeldungsdatum: 21. August 2009
Beiträge: 1861
Wohnort: München
|
Vain schrieb: Dann brauchst du wohl das passende Paket: http://packages.ubuntu.com/precise/xsltproc
Okay, auf die Idee hätte ich auch kommen können. Aber danke.
Es stellt sich übrigens auch mir die Frage, was bei Ubuntu/Debian der goldene Weg ist, um ein existierendes Paket anzupassen. Ich musste mich damit noch nie beschäftigen, weil ich das in Arch komfortabel über das ABS machen kann (PKGBUILD aus dem Tree kopieren, eigenen Patch schreiben, ins PKGBUILD einfügen, „makepkg -sirc “, fertig – um Abhängigkeiten kümmert er sich, Patches der Distribution sind schon dabei usw.). Ich dachte zuerst, dass dein Problem ganz leicht lösbar ist. Wenn du jetzt aber nach und nach vom einen ins andere Problem läufst (wer weiß, was als nächstes kommt)...
Tatsächlich der nächste Fehler:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | make
make -C rwimg
make[1]: Betrete Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/rwimg'
make[1]: Für das Ziel »all« ist nichts zu tun.
make[1]: Verlasse Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/rwimg'
make -C lispreader
make[1]: Betrete Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/lispreader'
make[1]: Für das Ziel »all« ist nichts zu tun.
make[1]: Verlasse Verzeichnis '/home/jonatan/.Programmierumgebung/C/metapixel/lispreader'
gcc -o metapixel main.o bitmap.o color.o metric.o matcher.o tiling.o metapixel.o library.o classic.o collage.o search.o utils.o error.o zoom.o getopt.o getopt1.o rwimg/librwimg.a lispreader/liblispreader.a -lpng -ljpeg -lgif -lm -lz -L/usr/X11R6/lib -g `pkg-config --libs glib-2.0`
xsltproc --nonet /usr/share/xml/docbook/stylesheet/nwalsh/current/manpages/docbook.xsl metapixel.xml
warning: failed to load external entity "/usr/share/xml/docbook/stylesheet/nwalsh/current/manpages/docbook.xsl"
cannot parse /usr/share/xml/docbook/stylesheet/nwalsh/current/manpages/docbook.xsl
make: *** [metapixel.1] Fehler 4
|
|
Jonius
Ikhayateam
(Themenstarter)
Anmeldungsdatum: 21. August 2009
Beiträge: 1861
Wohnort: München
|
Kann es sein, dass wenn einmal einer geantwortet hat, sonst keiner mehr auf das Forum stößt und man dadurch keine Hilfe mehr von anderen bekommt?
|
Kuehly
Anmeldungsdatum: 15. Oktober 2006
Beiträge: 282
|
Hm, er findet die Datei /usr/share/xml/docbook/stylesheet/nwalsh/current/manpages/docbook.xsl nicht. Ich kann nicht sicher sagen, in welchem Paket die enthalten ist. Es könnte docbook-xsl sein. Aber da metapixel selbst ja auch in den Quellen vorhanden ist: kann man nicht irgendwie die Pakete, die zum kompilieren nötig sind, sich installieren lassen? – Jan
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Die Geschichte sieht mir gerade so aus, als wenn hier der Pfad bei Ubuntu anders steht als bei der Version die Du Dir aus dem git geholt hast. Schau Dir mal auf der Paket-Seite rechts im Kästchen "Ressourcen" die diff- Datei an. Dort werden u.a. diverse Pfade für Debian angepasst. Vielleicht reicht es ja schon, wenn Du die passende diff-Datei auf Deine Quelle anwendest. (aber beachte bitte die Versionsnummer !) Sonst findest Du dort mit Sicherheit Hinweise, welche Pfade Du anpassen musst. Alternativ könntest Du natürlich auch mit apt-get das Quellpaket aus dem Repo holen und das Deine Anpassungen darauf aufbauen. LG, track
|
Jonius
Ikhayateam
(Themenstarter)
Anmeldungsdatum: 21. August 2009
Beiträge: 1861
Wohnort: München
|
track schrieb: Schau Dir mal auf der Paket-Seite rechts im Kästchen "Ressourcen" die diff- Datei an. Dort werden u.a. diverse Pfade für Debian angepasst.
In der Datei metapixel_1.0.2-7.1.diff finde ich keine Pfadanpassung. Was meinst du? Alternativ könntest Du natürlich auch mit apt-get das Quellpaket aus dem Repo holen und das Deine Anpassungen darauf aufbauen.
wie geht das?
|
radoe2
Anmeldungsdatum: 30. November 2006
Beiträge: 243
|
Jonius schrieb: track schrieb: Schau Dir mal auf der Paket-Seite rechts im Kästchen "Ressourcen" die diff- Datei an. Dort werden u.a. diverse Pfade für Debian angepasst.
In der Datei metapixel_1.0.2-7.1.diff finde ich keine Pfadanpassung. Was meinst du? Alternativ könntest Du natürlich auch mit apt-get das Quellpaket aus dem Repo holen und das Deine Anpassungen darauf aufbauen.
wie geht das?
Doch, die Pfadanpassung gibt es. Da die XSL Datei zur Erzeugung von Manpages aus DocBook-Quellen unter Ubuntu woanders liegt, wird das Makefile mit entsprechenden Optionen zur Anpassung der entsprechenden Variablen im Makefile aufgerufen:
$(MAKE) MANPAGE_XSL=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl
|
Jonius
Ikhayateam
(Themenstarter)
Anmeldungsdatum: 21. August 2009
Beiträge: 1861
Wohnort: München
|
Das Makefile, das in der diff-Datei steht erzeugt mit den über git heruntergeladenen Quelltexten auch Fehler. Ich weiß aber nicht, wie ich da jetzt basteln müsste. Wie komme ich denn an den Quelltext des Ubuntupakets?
|