On 08/06/2021 07:36, Marc Chantreux wrote:
salut à tous,

j'obtiens ça lorsque je tente de compiler ploot sur ma debian bulleye

+ cd ~/src/ploot
+ git remote get-url origin
git://bitreich.org/ploot
+ make
cc -static -o ploot-farbfeld ploot-farbfeld.o src/csv.o src/drawille.o 
src/ffplot.o src/font.o src/font13.o src/font8.o src/log.o src/scale.o 
src/util.o -lm
/usr/bin/ld : src/csv.o:(.bss+0x0) : définitions multiples de « log_level »; 
ploot-farbfeld.o:(.bss+0x810) : défini pour la première fois ici
…
/usr/bin/ld : src/scale.o:(.bss+0x0) : définitions multiples de « log_level »; 
ploot-farbfeld.o:(.bss+0x810) : défini pour la première fois ici
collect2: error: ld returned 1 exit status
make: *** [Makefile:18 : ploot-farbfeld] Erreur 1

par contre sous alpine ca marche sans soucis

     <<. chroot ~/local/machines/alpine-latest /bin/sh
     apk update
     apk add git musl-dev
     git clone git://bitreich.org/ploot
     cd ploot
     make

je pourrais m'arrêter là mais y'a peut-être bug et cas échéant
j'aimerais le remonter. par contre je n'ai presque pas fait de C pendant
les 25 dernières années et je ne sais pas trop quoi verifier pour
qualifier le bug. une idée?


Il peut manquer un extern dans un fichier d'entête. C'est la différence entre les C récents et le C89.


Autrefois on pouvait déclarer une variable globale entière foo avec

int foo;

dans un fichier d'entête header.h qui est #include "header.h" à plusieurs reprises (dans plusieurs fichiers *.c)

Maintenant, il faut déclarer dans header.h

   extern int foo;

Et définir dans un seul fichier truc.c la variable globale foo avec

   int foo;

ou même


   int foo = 34;

Librement

--
Basile Starynkevitch                  <bas...@starynkevitch.net>
(only mine opinions / les opinions sont miennes uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/

Répondre à