On 08/06/2021 07:45, Basile Starynkevitch wrote:
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;
Concretement la ligne 7 de votre fichier src/log.h doit contenir extern int log_level;
Et je conseille de coder dans config.mk plutôt:
CFLAGS = -Wall -Wextra -std=c99 -pedantic
-fPIC -I"src" -g -O -D_POSIX_C_SOURCE=200811L
-- Basile Starynkevitch <basile@starynkevitch.net> (only mine opinions / les opinions sont miennes uniquement) 92340 Bourg-la-Reine, France web page: starynkevitch.net/Basile/