Kompilier-Fehler: CFLAGS optimization level

freddy4711

Neuer User
Mitglied seit
7 Jul 2007
Beiträge
155
Punkte für Reaktionen
0
Punkte
0
Hi...

ich versuche gerade einen jabber-Server für die Fritzbox zu kompilieren.

Nun bricht leider der Build-Vorgang mit folgendem Fehler ab:

Code:
checking CFLAGS optimization level... configure: error: maximum allowed optimization level is -O2
make: *** [source/jabberd-2.2.9/.configured] Fehler 1
Danach habe ich die CFLAGS explizit in der jabberd.mk angegeben (siehe hier):
Code:
$(call PKG_INIT_BIN, 2.2.9)
$(PKG)_SOURCE:=jabberd-$($(PKG)_VERSION).tar.bz2
$(PKG)_SITE:=http://codex.xiaoka.com/pub/jabberd2/releases
$(PKG)_BINARY:=$($(PKG)_DIR)/jabberd
$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)/usr/bin/jabberd


$(PKG)_DEPENDS_ON := sqlite libidn openssl

$(PKG)_CONFIGURE_ENV += CROSS_COMPILE="yes"

$(PKG)_CONFIGURE_OPTIONS += --enable-sqlite
$(PKG)_CONFIGURE_OPTIONS += --enable-ssl

$(PKG_SOURCE_DOWNLOAD)
$(PKG_UNPACKED)
$(PKG_CONFIGURED_CONFIGURE)

$($(PKG)_BINARY): $($(PKG)_DIR)/.configured
        PATH="$(TARGET_PATH)" \
                $(MAKE) -C $(JABBERD_DIR) \
                CC="$(TARGET_CC)" \
                CFLAGS="-O2 -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"

$($(PKG)_TARGET_BINARY): $($(PKG)_BINARY)
        $(INSTALL_BINARY_STRIP)

$(pkg):

$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)

$(pkg)-clean:
        -$(MAKE) -C $(JABBERD_DIR) clean
        $(RM) $(JABBERD_DIR)/.configured

$(pkg)-uninstall:
        $(RM) $(JABBERD_TARGET_BINARY)

$(PKG_FINISH)

Leider nutzt er diese CFLAGS nicht. Kann mir jemand helfen?


Gruß Andreas
 
Hast du. Ein erneutes configure gemacht?
 
ich habe ein alle Verzeichnisse gelöscht, und anschließend nocheinmal
Code:
make jabberd-precompiled
ausgeführt. Leider auch diesmal ohne Erfolg.
 
Versuch mal, die CFLAGS bei $(PKG)_CONFIGURE_ENV mit anzugeben. Außerdem "make jabberd-dirclean".

Die andere Frage ist, warum mehr als -O2 nicht unterstützt wird. Fehler in jabberd oder Fehler im Compiler?
 
Hab gerade die CFLAGS unter
Code:
$(PKG)_CONFIGURE_ENV += CFLAGS="-O2 -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
angegeben. Jetzt läuft der Compiler weiter.

Nun bleibt er jedoch an einer anderen Stelle stecken:
Code:
checking if snprintf can handle NULL arguments... configure: error: in `/opt/freetz/source/jabberd-2.2.9':
configure: error: cannot run test program while cross compiling
 
Ok...kannst du mir das mal erklären, welche passende Antwort auf was ich vorgeben muss?

Ich weiß nämlich grad nicht mehr weiter.

Ich hänge mal die config.log an.


Gruß Andreas
 

Anhänge

  • config.log.txt
    170 KB · Aufrufe: 4
Zunächst einmal ist die Frage "checking if snprintf can handle NULL arguments".
Normalerweise würde configure das selbst herausfinden. Hier geht es aber nicht, weil ein Programm für ein anderes System erstellt werden soll und ein Test-Programm daher auf dem Host nicht lauffähig ist.

Die Antwort darauf ist Ja oder Nein und hängt von der Implementierung von snprintf ab. In diesem Fall ist man vermutlich auf der sicheren Seite, wenn man davon ausgeht, daß der Wert NULL nicht zulässig ist. Ansonsten kannst Du versuchen, die korrekte Antwort herauszufinden.

Code:
configure:20305: checking if snprintf can handle NULL arguments
configure:20311: error: cannot run test program while cross compiling

Hieraus ergeben sich die Zeilen in configure, in denen dieser Test ausgeführt wird. Irgendwo in dem Bereich, also einige Zeilen davor und/oder dahinter sollten Abfragen und Zuweisungen an eine Variable in der Form ac_cv_func_snprintf_null stehen. Wenn dieser Wert vor Aufruf von configure gesetzt ist, dann ist damit für configure die Antwort vorgegeben und der Test wird nicht mehr ausgeführt, und daher auch keine Fehlermeldung mehr, weil der Wert wegen cross compiling nicht ermittelt werden kann.
 
Hi...

also, ich versuch nun seit ungefähr 2 Stunden, diese Variable zu finden. Leider ohne Erfolg.

Ich hänge jetzt einmal die configure an, in der Hoffnung, dass mir jemand weiterhelfen kann. Mir raucht total der Kopf und ich komme nicht mehr weiter.

Gruß Andreas
 

Anhänge

  • configure.tar.gz
    117.8 KB · Aufrufe: 1
Anscheinend wird für diese Tests nicht die normale configure-Logik verwendet.

Lösche mal in der Datei configure die Zeilen 20304 bis 20439 (in der Hoffnung, daß snprintf den NULL Wert verträgt).
Alternativ läßt Du diese Passagen drin:
Code:
  20360 cat >>confdefs.h <<\_ACEOF
  20361 #define HAVE_BROKEN_SNPRINTF 1
  20362 _ACEOF
...
  20429 cat >>confdefs.h <<\_ACEOF
  20430 #define HAVE_BROKEN_VSNPRINTF 1
  20431 _ACEOF
 
Hi...

so ich bin ein bisschen weitergekommen.

ich hab nun mal im configure-Skript diese Zeilen entfernt. Das Skript läuft nun weiter, in der Hoffnung, dass snprintf und vsnprintf die NULL verträgt:).

Jedoch nur kurze Zeit später bleibt das Skript wieder an einem Test hängen, diesesmal für libidn.

Jetzt habe ich folgende Zeilen aus dem configure-Skript entfernt: 20789 - 20860.

Das Skript läuft anschließend wieder weiter und bleibt beim Paket udns hängen.

Also habe ich versucht, dieses Paket zu installieren. Leider bricht mir das configure-Skript dieses Paketes mit folgender Fehlermeldung ab.
Code:
configure: unknown option `--cache-file=/home/andreas/Programme/freetz/speedport.w701v/freetz-stable-1.1-eigener-kernel/make/config.cache'
make: *** [source/udns-0.0.9/.configured] Fehler 1
Ein configure --help zeigt, dass die Option --cache-file garnicht vorhanden ist.
Code:
configure: configure udns package.
Usage: ./configure [options]
where options are:
 --enable-option, --with-option --
   enable the named option/feature
 --disable-option, --without-option, --no-option --
   disable the named option/feature
 --help - print this help and exit
Optional features (all enabled by default if system supports a feature):
  ipv6 - enable/disable IP version 6 (IPv6) support
Nun weiß ich nicht mehr weiter.

Gruß Andreas
 
Dieses Programm verwendet ein configure, das die Option --cache-file nicht kennt.

Setze in das zugehörige Makefile die Zeile
Code:
$(PKG)_CONFIGURE_DEFOPTS=n

Damit wird verhindert, daß die Standard-Optionen an configure übergeben werden. Näheres dazu in make/Makefile.in
 
Ok...soweit so gut...

jetzt denke ich, dass das Paket nicht mit dem Cross-Compiler zurecht kommt.

Code:
checking for C compiler... no
configure: fatal: $CC (/home/andreas/Programme/freetz/speedport.w701v/freetz-stable-1.1-eigener-kernel/toolchain/target/bin/mipsel-linux-uclibc-gcc) is not a working compiler
make: *** [source/udns-0.0.9/.configured] Fehler 1
Bedeutet das, dass dieses Paket nicht auf der MIPSEL-Architektur funktioniert? Denn in den Debian-Paketquellen gibt es die libudns als MIPSEL-Paket.

Gruß Andreas
 
Ok...

das heißt jetzt, dass ich das Projekt begraben kann...
 
hmm, nur noch als Idee: evtl. halt direkt auf der FBox kompilieren. Das make-Paket gibt es ja genau dafür.
Für Mini-Apps funktioniert das vielleicht, schnell ist was anderes...
 
Ich habe in der Mailingliste von udns eine Anfrage bezüglich Cross-Compiling gestellt und auch Antwort erhalten.

Ich habe eine Datei gepatcht, und siehe da, das configure-Skript läuft durch.

Nur leider habe ich jetzt einen Fehler beim Aufruf von MAKE.
Code:
PATH=/home/andreas/Programme/freetz/speedport.w701v/freetz-stable-1.1-eigener-kernel/toolchain/build/gcc-4.2.1-uClibc-0.9.29/mipsel-linux-uclibc/bin:/bin:/sbin:/usr/bin:/usr/sbin \
                make -j2 -C  all \
                CCOPT="-fPIC -Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
make: *** all: No such file or directory.  Schluss.
make: *** [source/udns-0.0.9/libudns.so] Fehler 2
Kann ich nun irgendwo herausfinden, von was dieser Fehler kommt?


Gruß Andreas
 
Code:
                make -j2 -C  all \

Man beachte, daß nach dem -C zwei Leerzeichen stehen.

Es sollte heißen:
Code:
                make -j2 -C Verzeichnis all \
Die Variable, die das Verzeichnis angibt, ist leer. Daher wird 'all' als das Verzeichnis angenommen, in das gewechselt werden soll, dieses existiert aber nicht.
 
Du darfst innerhalb eines Targets nicht die Abkürzungen $(PKG) und $(pkg) verwenden.

Mfg Oliver
 
So...

ich glaub jetzt geb ich auf... :(

Ich habe Freetz nocheinmal komplett per SVN ausgecheckt, um auf dem Neusten Stand zu sein.

Leider geht jetzt garnichts mehr.

Ich wollte das Paket libidn, welches in der alten Toolchain einwandfrei kompiliert wurde, neu kompilieren (freetz-trunk). Das configure-Skript läuft durch, nur bricht das MAKE mit folgender (ähnlicher) Fehlermeldung ab.
Code:
PATH= \
                make -j2 -C source/libidn-1.14 all \
                CCOPT="-fPIC -Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
/bin/bash: make: is a directory
make: *** [source/libidn-1.14/libidn.so] Fehler 126
Mich macht stutzig, dass die PATH-Variable leer ist? Kann dies mit dem Fehler zusammenhängen?

Ich kappier grad garnichts mehr... :(
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.