Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Installation manuelle de GCC (et du fxSDK)
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

[Tutoriel] Installation manuelle de GCC (et du fxSDK)

Posté le 31/05/2014 17:02

Parmi les compilateurs C/C++ modernes de premier plan (LLVM, GCC, MSVC...), GCC est le seul à avoir un backend SuperH, ie. capable de générer des add-ins pour les calculatrices CASIO. Dans ce tutoriel, on va voir comment compiler GCC à la main. J'y mentionne également par le symbole les étapes supplémentaires nécessaires pour installer le fxSDK tout entier à la main.

Ce tutoriel était initialement utilisé pour toutes les installation de GCC pour la calculatrice, mais il y a maintenant des méthodes automatiques via le dépôt sh-elf-gcc, via MiddleArch ou même l'installation complète du fxSDK avec GiteaPC. Le texte ci-dessous est donc destiné à des personnes relativement expérimentées avec le terminal et les processus classiques de compilation, et spécifiquement à ceux qui voudraient tester des configurations inhabituelles. Pour relire l'ancien tutoriel, voir sur la forge Gitea.

Ce tutoriel est écrit pour Linux mais vous pouvez le suivre sous Windows 10 en utilisant WSL qui vous donnera accès à Ubuntu.

1. Présentation du processus

Dans ce tutoriel, on va compiler plusieurs logiciels. Côté compilateur, d'abord binutils, une suite de programmes qui gère l'assembleur, les fichiers objets, les bibliothèques, et l'édition des liens ; puis GCC, le compilateur C/C++ en lui-même.

Ensuite on va faire un détour par le fxSDK pour installer la bibliothèque mathématique et la bibliothèque standard C qui sont nécessaires pour avoir accès à la totalité du langage C.

On reviendra alors vers GCC, puisqu'une fois la lib standard C installée on peut compiler la bibliothèque standard C++, qui est là aussi nécessaire pour avoir accès à la totalité du langage C++.

Enfin on pourra finir l'installation du fxSDK avec gint et d'autres bibliothèques.

[fxSDK] Commencez par installer le dépôt fxsdk, qui fournit la sysroot dans laquelle on va installer le compilateur. C'est un cmake/make classique.

2. Installation des dépendances

Nos calculatrices utilisent des processeurs de la famille SuperH, on ne peut donc pas utiliser le même compilateur C que quand on programme pour l'ordinateur. On va utiliser un cross-compilateur qui ne s'appelera pas gcc mais sh-elf-gcc, attention à ne pas confondre !

Téléchargez la dernière version de binutils (téléchargement ici) ainsi que la dernière version de GCC (téléchargement ici). En cas d'erreur insondable, vous pourrez toujours tenter d'autres versions plus tard.

Attention : Si votre GCC système est en version 12.1 ou 12.2 (tapez gcc -v pour le déterminer), vous devez prendre GCC 11.1 pour la calculatrice à cause de ce bug de GCC pour x86_64.

Bien sûr GCC est un logiciel complexe avec pas mal de dépendances. Voici de quoi les installer :

# Pour Debian, Ubuntu, Mint, WSL pour Windows, et autres dérivés de Debian :
% sudo apt install libmpfr-dev libmpc-dev libgmp-dev libpng-dev libppl-dev flex g++ git texinfo
# Pour Arch Linux, Manjaro, et autres dérivés de Arch :
% sudo pacman -S mpfr libmpc gmp libpng ppl flex gcc git texinfo

  • MPFR : calcul flottant à précision arbitraire
  • MPC : calcul complexe à précision arbitraire
  • GMP : arithmétique entière multi-précision
  • libPNG : manipulations d'images PNG
  • PPL : optimisation polyhédrique (optimisation magique)
  • flex : générateur d'analyseurs lexicaux
  • g++ : compilateur C++ pour votre système
  • git : gestionnaire de versions
  • texinfo : générateur de documentation formatée

3. Préparation de l'environnement de compilation

Le compilateur et toutes les bibliothèques pour la calculatrice vont être installées dans un même dossier. Si vous utilisez le fxSDK, ce dossier est pré-choisi et la commande fxsdk path sysroot vous l'affiche. Sinon vous pouvez aller où vous voulez, mais restez dans votre dossier personnel.

% export PREFIX="$(fxsdk path sysroot)"
# Exemple de dossier hors fxSDK :
# export PREFIX="$HOME/opt/sh-elf-2.39-11.1.0"

% mkdir -p $PREFIX

Assurez-vous que $PREFIX/bin est dans votre PATH. Extrayez le contenu des archives que vous avez téléchargées dans un dossier temporaire, et créez deux répertoires build-binutils et build-gcc.

% tar -xJf binutils-2.39.tar.xz
% tar -xJf gcc-11.1.0.tar.xz
% mkdir build-binutils build-gcc

On va ensuite appliquer quelques patchs. On va d'abord toucher un fichier de binutils pour éviter la régénération d'un parser avec bison qui ne marche plus depuis longtemps :

% touch binutils-2.39/intl/plural.c

Si vous utilisez GCC 11.1 (et sans doute quelques versions d'avant), téléchargez de plus ce patch qui désactive des tests de configuration inutilement aggressifs dans la lib C++ et appliquez-le :

% patch -u -N -p0 < gcc-11.1.0-libstdc++-v3-skip-dlopen.patch

4. Compilation de binutils

La compilation de binutils est un configure/make classique. Les options qu'on utilise sont :

  • --prefix pour indiquer le dossier d'installation final.
  • --target="sh3eb-elf" pour spécifier qu'on veut un cross-compilateur pour SuperH.
  • --with-multilib-list="m3,m4-nofpu" indique plus précisément qu'on veut une variante pour SH3 et une pour SH4 sans FPU.
  • --program-prefix="sh-elf-" renomme le compilateur de sh3eb-elf-gcc à sh-elf-gcc vu qu'on a aussi le SH3.

Il n'y a pas beaucoup d'autres options intéressantes, mais vous pouvez les voir toutes avec configure --help.

% cd build-binutils
% ../binutils-2.39/configure --prefix="$PREFIX" --target="sh3eb-elf" --with-multilib-list="m3,m4-nofpu" --program-prefix="sh-elf-"

Une fois que tout est configuré, il n'y a plus qu'à compiler et à installer. Normalement ça va assez vite, comptez quelques minutes.

% make -j4
% make install-strip

Les exécutables de binutils ont dû apparaître dans $PREFIX/bin Essayez sh-elf-ld --version qui doit vous renvoyer la version de binutils (ici 2.39).

5. Compilation de gcc et de libgcc

Ensuite c'est pareil mais pour GCC. En plus des options précédentes, on indique :

  • --enable-languages="c,c++" qui spécifie les compilateurs qu'on veut. Si vous voulez expérimenter avec d'autres langages notamment Ada, D, Go ou Fortran, c'est là qu'il faut commencer !
  • --without-headers qui indique essentiellement qu'on veut un cross-compilateur.
  • --enable-clocale="generic" qui simplifie le module <locale> de la lib C++.
  • --enable-libstdcxx-allocator qui fait de même avec les allocateurs mémoire.
  • --disable-threads qui désactive le threading (qu'on n'a pas).
  • --disable-libstdcxx-verbose qui élimine des logs dans la lib C++.
  • --enable-cxx-flags="-fno-exceptions" qui désactive les exceptions durant la compilation de la lib C++.

Voyez le guide de configuration pour toutes les options utiles.

% cd "$PREFIX/build-gcc"
% ../gcc-11.1.0/configure --prefix="$PREFIX" --target="sh3eb-elf" --with-multilib-list="m3,m4-nofpu" --enable-languages="c,c++" --without-headers --program-prefix="sh-elf-" --enable-clocale="generic" --enable-libstdcxx-allocator --disable-threads --disable-libstdcxx-verbose --enable-cxx-flags="-fno-exceptions

Cette fois la compilation occupera entre 10 et 30 minutes... ou 5/6 heures sur un vieux Raspberry Pi.

% make -j4 all-gcc all-target-libgcc
% make install-strip-gcc install-strip-target-libgcc

Avec ça vous devez pouvoir taper sh-elf-gcc -v et la version et les options de compilation.

[fxSDK] C'est le moment d'installer OpenLibm, avec make.
[fxSDK] Installez aussi la lib C, fxlibc, un autre cmake/make classique.

6. Compilation de libstdc++

On peut maintenant revenir dans le dossier de compilation de GCC et compiler des libs plus évoluées, comme la lib C++. Si vous testez d'autres langages (par exemple D) c'est le moment de compiler les libs qui vont avec (libphobos), ou même de compiler libssl, libiberty, etc. selon vos goûts.

% make -j4 all-target-libstdc++-v3
% make install-strip-target-libstdc++-v3

Et voilà, la toolchain est complète. Si vous manquez d'espace disque vous pouvez supprimez les archives, dossiers de sources, et dossiers de build de binutils et GCC.

Vous pouvez aussi installer gdb dans la même veine que binutils pour pouvoir debugger les add-ins à distance.

[fxSDK] Installez maintenant gint, et les autres libs qui vous plaisent (eg. libprof, zlib, etc).

Et voilà, vous avez un compilateur C/C++ complet voire un SDK complet pour programmer des add-ins.

Fichier joint


Précédente 1, 2, 3 ··· 5, 6, 7, 8, 9, 10, 11 ··· 20 ··· 23, 24, 25 Suivante
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 04/08/2017 18:42 | #


À première vue, t'as pas inclus math.h dans tes headers. Par contre je sais pas si elle est définie dans le fxsdk.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 05/08/2017 14:15 | #


Han, pas de math dans gint, pour l'instant. Linke avec fxlib en incluant son header. (Tu sauras l'extraire des fichiers du SDK ?)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 07/08/2017 11:52 | #


Euh je t'avoue que pas trop
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 07/08/2017 15:52 | # | Fichier joint


Sous Windows, tu vas chercher le dossier du SDK (normalement) C:\Program Files\CASIO\fx-9860G SDK\, et ensuite tu te diriges vers OS\SH\include ; tu y trouveras tous les headers standard. Dans OS\FX\include, tu as ceux de fxlib (partie spécifique à la calculatrice).

Je te joins ma version de <math.h>, prise dans le SDK sous Windows.

fxlib est donnée dans la partie 7 du tutoriel. Pour l'utiliser, renomme le fichier fxlib.a en libfx.a, mets-le dans le même dossier que ton Makefile et ajoute -L . -lfx à la *fin* de ta commande de linkage, après `fxsdk --libs`. Et tout devrait bien se passer !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 14/08/2017 22:23 | #


Merci, juste rapidement nouveau problème, j'avais cette erreur:
sh3eb-elf-gcc -c src/AGBSW.cpp -o build/AGBSW.cpp.o `fxsdk --cflags` -I include
In file included from src/AGBSW.h:12:0,
                 from src/AGBSW.cpp:1:
/usr/share/fxsdk/gint/stdlib.h:97:6: error: conflicting declaration of C function 'void free(void*)'
void free(void *ptr);
      ^~~~
In file included from src/AGBSW.h:6:0,
                 from src/AGBSW.cpp:1:
include/fxlib.h:105:6: note: previous declaration 'void free(const void*)'
void free(const void *pointer);
      ^~~~

et j'ai donc viré le void free(const void *pointer); dans fxlib.h, ça se fait ?

Ajouté le 14/08/2017 à 23:25 :
Et tant qu'a faire un autre problème:
sh3eb-elf-gcc -c src/level.cpp -o build/level.cpp.o `fxsdk --cflags` -I include
src/level.cpp: In member function 'int Level::load(int)':
src/level.cpp:105:26: error: 'atoi' was not declared in this scope
      m_box[k] = atoi(strN);

Pourtant j'ai bien inclut la librairie dans level.h: #include <stdlib.h>

Donc je comprend pas trop
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 15/08/2017 06:03 | #


Boarf, en général, on essaie de ne jamais toucher un header de ce type, mais si t'as vraiment besoin de la fxlib, soit. C'est vrai que la cohabitation gint – fxlib est pas hyper top, vivement qu'on puisse virer définitivement cette dernière.

Pour la deuxième erreur, c'est pas stdlib.h dont tu as besoin, mais math.h
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 15/08/2017 07:35 | #


T'as eu raison de virer free() de <fxlib.h>, en fait c'est moi qui l'y avait ajouté en attendant d'implémenter stdlib ! Il y en a quelques autres dans la même veine.

Concernant atoi(), elle est bel et bien dans <stdlib.h> et non dans <math.h>, la faute est que tu tentes toi aussi de compiler du C++ alors que j'ai pas encore fait le nécessakre pour que ce soit possible !

Pour ce problème, il faut que tu encadres tes inclusions de headers avec extern "C" {}, sinon le compilateur C++ déforme les noms de fonctions. Cependant si tu veux réussir à faire marcher le programme entier, tu devras implémenter toi-même new et delete, ou éviter de les utiliser.

extern "C" {
#include <stdlib.h>
}

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 15/08/2017 08:58 | #


Lephenixnoir a écrit :
Concernant atoi(), elle est bel et bien dans <stdlib.h> et non dans <math.h>

Faut que j'arrête de poster à 6h du mat', j'ai capté une des fonctions trigo type acos ><
Bref, au temps pour moi.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 15/08/2017 18:08 | # | Fichier joint


Mmh j'ai fait ce que tu m'as dit mais ça semble pas résoudre le problème :/
Je met le fichier en pièce jointe et la commande et son résultat sont toujours les mêmes
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 15/08/2017 18:55 | #


J'ai trouvé le bug ! C'est Lephe qui est un imbécile fini et qui a pas encore implémenté la fonction.

C'est dangereux de partir tout seul ! Tiens, prends ça :

static int atoi(const char *str)
{
    /* Number of digits, sign character */
    int n = 0, sign = 1;

    /* Reach the first glyph */
    while(*str == ' ' || *str == '\t' || *str == '\n') str++;
    if(!*str) return -1;

    /* Validating signs */
    if(*str == '-')        sign = -1, str++;
    else if(*str=='+')    sign = +1, str++;
    if(*str < '0' || *str > '9') return -1;

    /* Reading digits */
    while(*str >= '0' && *str <= '9')
    {
        n *= 10;
        n += *str++ - '0';
    }

    return n * sign;
}

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 15/08/2017 19:46 | #


Hmm je le met à un endroit particulier ou dans un de mes fichiers ?
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 15/08/2017 20:06 | #


Tu le mets dans n'importe quel fichier qui se fait compiler avec le reste du projet, et tu le déclares à la main parce que du coup la déclaration est pas dans <stdlib.h>.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 15/08/2017 20:07 | #


Ça roule, merci

Ajouté le 16/08/2017 à 12:21 :
Bon ça aurait été trop simple que ça soit fini alors voilà la suite
sh3eb-elf-gcc build/syscall.c.o build/mobile.cpp.o build/control.cpp.o build/AGBSW.cpp.o build/MonochromeLib.c.o build/piaf.cpp.o build/level.cpp.o build/bow.cpp.o build/memory.c.o build/attractor.cpp.o build/draw.cpp.o build/object.cpp.o build/pig.cpp.o -o build/AGBSW.elf `fxsdk --cflags --libs` -I include -L . -lfx
/home/user/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: build/AGBSW.elf section `.cc' will not fit in region `ram'
/home/user/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: section .gcc_except_table loaded at [000000000031647c,000000000031655f] overlaps section .data loaded at [000000000031647c,0000000000316703]
/home/user/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: section C loaded at [0000000000316704,00000000003169c7] overlaps section .cc loaded at [0000000000316704,0000000000318a0f]
/home/user/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: region `ram' overflowed by 4400 bytes
build/AGBSW.cpp.o:(.eh_frame+0x53): undefined reference to `___gxx_personality_v0'
build/level.cpp.o:(.eh_frame+0x7f): undefined reference to `___gxx_personality_v0'
build/bow.cpp.o:(.eh_frame+0xcf): undefined reference to `___gxx_personality_v0'
./libfx.a(filebios.robj): In function `_Bfile_DeleteFile':
C:\Documents and Settings\�c��\My Documents\fx-9860G SDK files\filebios.c:(P+0x6c0): undefined reference to `_strncmp'
collect2: error: ld returned 1 exit status
Makefile:26 : la recette pour la cible « build/AGBSW.elf » a échouée
make: *** [build/AGBSW.elf] Erreur 1

Bon après c'est possible que ça soit du au fait qu'il faille que je reprenne le code mais je préfère être sûr
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 16/08/2017 12:52 | # | Fichier joint


Rien n'est facile de toute façon ! Cela dit, tu te pointes avec un programme écrit en C++, porté depuis le SDK, alors que gint n'est suffisamment développé/prévu pour aucun de ces machins. Alors je peux t'aider, mais ça va être un *poil* sportif...

Donc, allons-y...
/home/user/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: build/AGBSW.elf section `.cc' will not fit in region `ram'

C'est certainement à cause de la section .eh_frame, qui contient des infos permettant de « dérouler » la pile en cas d'exception pour générer des logs. On ne s'en servira pas. La solution habituelle serait donc de passer -fno-asynchronous-unwind-tables au compilateur (ce qui évite la génération de ces tables), mais ce ne sera pas nécessaire (vois ensuite).

/home/user/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: section .gcc_except_table loaded at [000000000031647c,000000000031655f] overlaps section .data loaded at [000000000031647c,0000000000316703]

Ça c'est bien des trucs de C++. Clairement cette section contient grosso modo la même chose que .eh_frame, mais c'est les infos spécifiques au C++ pour les exceptions.
Les exceptions ne marcheront certainement pas avec gint, donc on va se débarrasser de cette section. Je te joins un nouveau linker script qui fait ça, et supprime au passage .eh_frame. Remplace le linker script habituel (normalement localisé sur /usr/share/fxsdk/linker.ld) par celui-là (et renomme-le en linker.ld, le formulaire m'embête parce qu'il connaît pas .ld !).

/home/user/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: section C loaded at [0000000000316704,00000000003169c7] overlaps section .cc loaded at [0000000000316704,0000000000318a0f]

Cette section-là est un des trucs de fxlib. Et comme elle est pas citée dans le linker script de gint, elle se retrouve n'importe où. J'ai aussi changé ça dans le nouveau linker script.

/home/user/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: region `ram' overflowed by 4400 bytes

Trop de données en RAM. Mes modifications précédentes arrangent ça dans une certaine mesure, mais pas forcément totalement. Si l'erreur subsiste il faudra nettoyer ton code en détail et virer tous les sprites tous moches dans les tableaux d'unsigned char qui font la spécialité de MonochromeLib si ce n'est pas déjà fait (et si ça l'est, t'es dans la merde).

build/AGBSW.cpp.o:(.eh_frame+0x53): undefined reference to `___gxx_personality_v0'
build/level.cpp.o:(.eh_frame+0x7f): undefined reference to `___gxx_personality_v0'
build/bow.cpp.o:(.eh_frame+0xcf): undefined reference to `___gxx_personality_v0'

Des erreurs localisées sur des références de .eh_frame à des symboles bien mangled par le compilo. Si je suis suffisamment malin ils partiront avec la suppression de la section .eh_frame.

./libfx.a(filebios.robj): In function `_Bfile_DeleteFile':
C:\Documents and Settings\�c��\My Documents\fx-9860G SDK files\filebios.c:(P+0x6c0): undefined reference to `_strncmp'

Rooh, strncmp() qui est pas implémentée. Le dev' qui a construit ta lib' est vraiment un imbécile. Ajoute ça avec atoi() :
#include <stddef.h>

int strncmp(const char *s1, const char *s2, size_t n)
{
    while(*s1 && *s2 && n)
    {
        if(*s1 != *s2) return *s1 - *s2;
        n--;
        s1++;
        s2++;
    }

    return 0;
}

Et arrange-toi pour que le fichier object qui contient cette fonction arrive tout à la fin de la ligne de commande, après -lfx.

Pis on verra bien.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 17/08/2017 14:31 | #


Ah oui un peu de sport pour toi en effet
Bon il ne reste que l'erreur de la fxlib:
sh3eb-elf-gcc build/mobile.cpp.o build/control.cpp.o build/AGBSW.cpp.o build/MonochromeLib.c.o build/piaf.cpp.o build/level.cpp.o build/bow.cpp.o build/memory.c.o build/attractor.cpp.o build/draw.cpp.o build/object.cpp.o build/pig.cpp.o -o build/AGBSW.elf `fxsdk --cflags --libs` -I include -L . -lfx build/syscall.c.o
/home/usr/opt/sh3eb-elf/lib/gcc/sh3eb-elf/6.1.0/../../../../sh3eb-elf/bin/ld: section D loaded at [0000000000316a70,0000000000316ad7] overlaps section .gint loaded at [0000000000316a70,000000000031714f]
collect2: error: ld returned 1 exit status

Ça commence à sentir bon
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 17/08/2017 16:52 | # | Fichier joint


Je m'y attendais en fait, après avoir vu passer la section de code (C), ça m'aurait surpris de ne pas avoir à m'occuper de la section de données (D).

J'ai joint un nouveau linker script, après tu risques de voir ton add-in crasher lamentablement. (très fort)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Legolas Hors ligne Ancien rédacteur Points: 3266 Défis: 104 Message

Citer : Posté le 17/02/2018 18:19 | #


Salut ! Saurais-tu de quoi peut provenir l'erreur suivante ( https://pastebin.com/Ch7zv1Lj ) après la commande citée pour l'installation de libgcc ?
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 17/02/2018 18:57 | #


Vérifie ton installation de gmp, mpfr et mpc. Le dossier dans lequel les bibliothèques sont installées doit apparaître dans la variable LD_LIBRARY_PATH. Je serais vraiment surpris que ce ne soit pas le cas par défaut (tu peux vérifier), donc je soupçonne une install incomplète.

Tu peux utiliser find ou ton gestionnaire de paquets pour localiser les libs dynamiques si ton installation a été réalisée proprement mais que la compilation ne marche toujours pas.

Accessoirement, il se peut qu'il existe des versions plus récentes. Si oui, alors utilise-les.

Ajouté le 17/02/2018 à 18:57 :
Ah et, je peux voir ton fichier config.log aussi ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Legolas Hors ligne Ancien rédacteur Points: 3266 Défis: 104 Message

Citer : Posté le 17/02/2018 19:05 | #


J'ai vérifié puisque je les ai réinstallées, elles sont à jour. Je vais voir leur localisation. Cette variable est visible où au juste ?

Voici le fichier config.log : https://pastebin.com/jx3VayBY
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 17/02/2018 19:07 | #


Hmph, à la ligne 122 de ton config.log, il a la réponse. Ce grand malin.

C'est pas une variable. Si t'es prêt à attendre un peu, utilise la commande suivante :

$ sudo find / -iname "libmpfr*"

Ça listera tous les fichiers du système dont le nom commence par libmpfr. En particulier, le dossier d'installation.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Legolas Hors ligne Ancien rédacteur Points: 3266 Défis: 104 Message

Citer : Posté le 17/02/2018 19:12 | #


Tu veux dire, cette ligne ?

configure:4528: checking for suffix of object files


Ok, je lance ;

La Fontaine a écrit :
Patience et longueur de temps valent mieux que force ni que spam.



Ajouté le 17/02/2018 à 19:31 :
J'ai comme réponse :


/usr/lib/x86_64-linux-gnu/libmpfr.so.4.1.4
/usr/lib/x86_64-linux-gnu/libmpfr.a
/usr/lib/x86_64-linux-gnu/libmpfr.so
/usr/lib/x86_64-linux-gnu/libmpfr.so.4
/usr/share/doc/libmpfr4
/usr/share/doc/libmpfr-dev
/var/lib/dpkg/info/libmpfr-dev:amd64.md5sums
/var/lib/dpkg/info/libmpfr-dev:amd64.list
/var/lib/dpkg/info/libmpfr4:amd64.list
/var/lib/dpkg/info/libmpfr4:amd64.md5sums
/var/lib/dpkg/info/libmpfr4:amd64.shlibs
/var/lib/dpkg/info/libmpfr4:amd64.symbols
/var/lib/dpkg/info/libmpfr4:amd64.triggers
/var/cache/apt/archives/libmpfr-dev_3.1.4-1_amd64.deb

Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



Précédente 1, 2, 3 ··· 5, 6, 7, 8, 9, 10, 11 ··· 20 ··· 23, 24, 25 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 69 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd