Aller au contenu

Erreur De Compilation Darkstat


Messages recommandés

Comme certains le savent je me lance dans la génération de spk et, comme me l'a fait remarquer Diaoul, commençons par générer un binaire propre…

Donc je cherche à compiler Darkstat.

Ça demande libpcap, j'ai compilé libpcap. (j'ai encore du installer quelques paquets à mon Debian et ai été bluffé par l'efficacité et la simplicité de la chose…!)

Bref après quelques galères de débutant ça me génère le Makefile, le config.h et passe à la compilation.

Sauf qu'à un moment ça dit :


HOSTCC c-ify

C-IFY stylecss.h

./c-ify: 5: Syntax error: ")" unexpected

make[1]: ***[stylecss.h] Erreur 2

make[1]: quittant le répertoire "blablabla"

make: *** [compile_target] Erreur 2

J'ai jeté un œil au fichier c-ify.c et je n'ai rien trouvé de bizarre.

Une idée ?

Modifié par Amsonia
Lien vers le commentaire
Partager sur d’autres sites

Si je résume :

  • Tu as cross/libcap avec un Makefile adapté et la description de ce qu'il faut
  • Quand dans cross/libcap tu tapes "make ARCH=88f6281" tout se passe bien ?
  • Tu as bien le répertoire cross/libcap/work-88f6281/install/ avec toute l'arborescence qui va bien et les binaires dedans ? (lib+bin) Et les headers ? (include)

Si ça c'est bon, tu fais pareil avec Darkstat :

  • Répertoire cross/darkstat avec un Makefile adapté avec bien sur "DEPENDS = cross/libcap"
  • Ensuite dans cross/darkstat tu tapes "make ARCH=88f6281" et là ça merdouille ?

Le make de SPKSRC passe par plusieurs étapes pour un binaire :

  1. depends
  2. download
  3. extract
  4. patch
  5. configure
  6. build
  7. install

Je te conseille donc d'essayer d'identifier à quelle étape ça merde, en tapant successivement "make ARCH=88f6281 {etape}" dans le répertoire cross/darkstat après avoir nettoyé le tout avec "make clean".

Il faut vraiment plus de logs aussi, met sur pastebin et envoie la totale. Saches que dans spksrc on ne touche jamais au code des binaires, si ça merde c'est un problème de configuration (étape configure) ou build (étape de compilation). Peu utile donc d'aller voir le code du programme, je ne suis même pas sûr que ça puisse te donner des pistes.

Quels paquets as tu installé sur Debian pour pouvoir cross compiler libcap ?

Lien vers le commentaire
Partager sur d’autres sites

J'avais tout fait avec l'archi de mon DS410 (ppc853x), j'ai tout refait avec la tienne : ça bloque au même endroit (build) mais pas exactement la même erreur.

Voici le log complet : http://pastebin.com/U8EQXujn

Et voici l'erreur finale :


	./c-ify: 1: Syntax error: word unexpected (expecting ")")

	make[1]: *** [stylecss.h] Erreur 2

	make: *** [compile_target] Erreur 2

Pour compiler libpcap, ça me disait que mon 'lex' était insuffisant et aussi qu'il y avait 'flex' qui est mieux que lex.

J'ai donc installé 'flex' et un autre truc (kimwitu) parce que j'ai vu les mots 'lex' et 'compilateur' dans sa description :P

Modifié par Amsonia
Lien vers le commentaire
Partager sur d’autres sites

Ce qu'il y a c'est que il utilise un autre GCC pour compiler ça : HOSTCC au lieu de CC. Donc je pense que HOSTCC pointe vers ton gcc à toi et pas le cross. Ce qui fait que GCC il utilise un truc illisible produit par le GCC de cross. D'ou l'erreur.

Essaye de faire "cross/darkstat/work-88f6281/darkstat-3.0.715/configure --help" pour voir les options qu'il te propose et s'il y a quelque chose en relation avec HOSTCC.

Ultimement, essaye en écrasant la variable HOSTCC par la même valeur que CC avec qqch du genre :

ENV += HOSTCC=$$(CC) dans le Makefile

Lien vers le commentaire
Partager sur d’autres sites

Voilà ce que je pense être pertinent dans le --help :


To assign environment variables (e.g., CC, CFLAGS...), specify them as

VAR=VALUE.  See below for descriptions of some of the useful variables.


(plein de trucs ici...)


Optional Packages:

  --with-PACKAGE[=ARG]	use PACKAGE [ARG=yes]

  --without-PACKAGE	   do not use PACKAGE (same as --with-PACKAGE=no)

  --with-chroot-dir	   specify the chroot directory (default: /var/empty)

  --with-privdrop-user	specify which user to drop privileges to (default:

						  nobody)

  --with-pcap=DIR		 prefix to libpcap installation

Some influential environment variables:

  CC		  C compiler command

  CFLAGS	  C compiler flags

  LDFLAGS	 linker flags, e.g. -L<lib dir> if you have libraries in a

			  nonstandard directory <lib dir>

  LIBS		libraries to pass to the linker, e.g. -l<library>

  CPPFLAGS	(Objective) C/C++ preprocessor flags, e.g. -I<include dir> if

			  you have headers in a nonstandard directory <include dir>

  CPP		 C preprocessor

Use these variables to override the choices made by `configure' or to help

it to find libraries and programs with nonstandard names/locations.

Lien vers le commentaire
Partager sur d’autres sites

Si je lis correctement la chose, il faudrait que je rajoute la chose suivante dand mon Makefile :

CONFIGURE_ARGS = CC= euh quoi ?

Je me suis un peu baladé dans ce dossier cross/darkstat/work-88f6281/darkstat-3.0.715 et le config.log me semble bien dire que les bons compilateurs ont été trouvés. Par exemple :


configure:2214: checking for arm-none-linux-gnueabi-gcc

configure:2241: result: /home/amsonia/spksrc/toolchains/syno-88f6281/work/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc

configure:2510: checking for C compiler version

configure:2519: /home/amsonia/spksrc/toolchains/syno-88f6281/work/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc --version >&5

arm-none-linux-gnueabi-gcc (GCC) 4.2.1

Lien vers le commentaire
Partager sur d’autres sites

Dans config.log j'ai rien.

Dans Makefile et Makefile.in j'ai plusieurs choses :


CC = /home/amsonia/spksrc/toolchains/syno-88f6281/work/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc

CFLAGS = -pipe  -I/home/amsonia/spksrc/cross/darkstat/work-88f6281/install//usr/local/include

CPP = /home/amsonia/spksrc/toolchains/syno-88f6281/work/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-cpp

CPPFLAGS = -I/home/amsonia/spksrc/cross/darkstat/work-88f6281/install//usr/local/include

INSTALL = /usr/bin/install -c

LDFLAGS =  -L/home/amsonia/spksrc/cross/darkstat/work-88f6281/install//usr/local/lib -Wl,--rpath-link,/home/amsonia/spksrc/cross/darkstat/work-88f6281/install//usr/local/lib -Wl,--rpath,/usr/local/lib

LIBS = -lpcap -lz



HOSTCC ?= $(CC)

HOSTCFLAGS ?= $(CFLAGS)

Ca pointe bien au bon endroit non ?

$(STATICHS): c-ify

c-ify: static/c-ify.c

$(AM_V_HOSTCC)

$(AM_V_at)$(HOSTCC) $(HOSTCFLAGS) static/c-ify.c -o $@


# silent-rules

AM_DEFAULT_VERBOSITY = 0

AM_V_CC = $(am__v_CC_$(V))

am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))

am__v_CC_0 = @echo "  CC	" $@;

AM_V_LINK = $(am__v_LINK_$(V))

am__v_LINK_ = $(am__v_LINK_$(AM_DEFAULT_VERBOSITY))

am__v_LINK_0 = @echo "  LINK  " $@;

AM_V_HOSTCC = $(am__v_HOSTCC_$(V))

am__v_HOSTCC_ = $(am__v_HOSTCC_$(AM_DEFAULT_VERBOSITY))

am__v_HOSTCC_0 = @echo "  HOSTCC" $@;

AM_V_CIFY = $(am__v_CIFY_$(V))

am__v_CIFY_ = $(am__v_CIFY_$(AM_DEFAULT_VERBOSITY))

am__v_CIFY_0 = @echo "  C-IFY " $@;

AM_V_at = $(am__v_at_$(V))

am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))

am__v_at_0 = @

edit : rajouté la définition des variables en haut

et voici le pastebin du makefile complet : http://pastebin.com/c5i4ebfd

Modifié par Amsonia
Lien vers le commentaire
Partager sur d’autres sites

Ce que je ne comprends pas c'est pourquoi il a besoin d'un HOSTCC alors que ce n'est pas précisé dans le configure.

Bref, quand c'est comme ça ce que tu fais c'est :

  1. Recherche Google avec ton erreur
  2. Investigue toi même comme tu le fais
  3. Consulter les règles de OpenEmbedded s'ils l'ont http://cgit.openembe...ed/tree/recipes
  4. Consulter les règles Optware s'ils l'ont http://trac.nslu2-li...e/browser/trunk

Tout ça a fin de trouver les bonnes variables à mettre et les bons arguments.

Essaye d'écraser HOSTCC par "gcc" tout simplement en rajoutant HOSTCC=gcc dans CONFIGURE_ARGS

Si ça ne marche pas, essaye de le mettre dans ENV : ENV += HOSTCC=gcc

J'ai l'impression que ce darkstat est un bon cas d'école :)

Modifié par Diaoul
Lien vers le commentaire
Partager sur d’autres sites

Diaoul, il fallait bien mettre ENV += HOSTCC=gcc dans le makefile ! J'ai bien darkstat dans cross/darkstat/work/88f6281/install/usr/local/sbin !

Le plist de darkstat a aussi été généré.

Pour mon archi ppc853x par contre, ça ne marche pas :(

Ca bloque au même endoit et me dit


  HOSTCC c-ify

`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.

cc1: error: unrecognized command line option "-mfloat-gprs=double"

static/c-ify.c:1: error: bad value (8548) for -mtune= switch

On est reparti pour un tour...

Lien vers le commentaire
Partager sur d’autres sites

Non c'est pas reparti pour un tour ;)

Là c'est ton HOSTCC (gcc sur ta machine host, x86 donc) qui utilise les arguments (CFLAGS) du gcc de la toolchain (un gcc qui permet de faire des binaires utilisables sur la target : le NAS).

Tu as bien mis le doigt dessus :

HOSTCC ?= $(CC)

HOSTCFLAGS ?= $(CFLAGS)
On a corrigé le HOSTCC qui prennait le mauvais GCC mais on n'a pas corrigé les arguments qui y sont passés et qui sont spécifique à l'ARCH.
ENV += HOSTCC=gcc HOSTCFLAGS=[/code]

Lien vers le commentaire
Partager sur d’autres sites

À tout hasard je remets les infos que j'ai trouvé sur le makefile de OpenWRT - https://dev.openwrt.org/browser/packages/net/darkstat/Makefile

CONFIGURE_ARGS += \

   		 --disable-debug \

   		 --with-chroot-dir=/var/empty


    TARGET_CFLAGS += -std=gnu99


    define Build/Compile

   		 $(HOSTCC) $(PKG_BUILD_DIR)/static/c-ify.c \

   				 -o $(PKG_BUILD_DIR)/c-ify

   		 $(call Build/Compile/Default)

    endef

Lien vers le commentaire
Partager sur d’autres sites

Non c'est pas reparti pour un tour ;)

Là c'est ton HOSTCC (gcc sur ta machine host, x86 donc) qui utilise les arguments (CFLAGS) du gcc de la toolchain (un gcc qui permet de faire des binaires utilisables sur la target : le NAS).

Tu as bien mis le doigt dessus :

HOSTCC ?= $(CC)

HOSTCFLAGS ?= $(CFLAGS)
On a corrigé le HOSTCC qui prennait le mauvais GCC mais on n'a pas corrigé les arguments qui y sont passés et qui sont spécifique à l'ARCH.
ENV += HOSTCC=gcc HOSTCFLAGS=[/code]

Ok tu as raison, évidemment. Ca marche pour mon PPC également.

Je tente sur 'all-archs' pour voir. Ca d/l les busybox de chaque archi là...

En attendant, je repasse dans pour la suite des évènements. Les modifications du .plist si je me souviens bien :)

Modifié par Amsonia
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.