Portál AbcLinuxu, 4. května 2025 12:33
$ cat Makefile CFLAGS := -W -Wall -O2 -D__UNIX__ CC := gcc ### Misc DOCS = CHANGES COPYING README PACKAGE = vstrip-0.8e PREFIX = /usr/local BINDIR = $(PREFIX)/bin DOCDIR = $(PREFIX)/share/doc ### Sources SOURCE_FILES=file_io.h file_io.c in_buffer.h in_buffer.c parse_ifo.h parse_ifo.c s_types.h main.c vstrip.h vstrip.c ### Objects and executables OBJ_FILES = file_io.o in_buffer.o parse_ifo.o main.o vstrip.o EXEC_FILES = vstrip ### General targets all: $(EXEC_FILES) clean: rm -f $(EXEC_FILES) $(OBJ_FILES) install : install -o root -g root -m 755 $(EXEC_FILES) $(BINDIR) install -o root -g root -m 755 -d $(DOCDIR)/$(PACKAGE) install -o root -g root -m 644 $(DOCS) $(DOCDIR)/$(PACKAGE) uninstall: (cd $(BINDIR) && rm -f $(EXEC_FILES)) (cd $(DOCDIR) && rm -rf $(PACKAGE)) ### Details vstrip : file_io.o in_buffer.o main.o parse_ifo.o vstrip.o $(CC) -g file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o vstrip file_io.o : s_types.h file_io.h file_io.c in_buffer.o : s_types.h file_io.h in_buffer.h in_buffer.c main.o : s_types.h file_io.h vstrip.h main.c parse_ifo.o : s_types.h file_io.h parse_ifo.h vstrip.h parse_ifo.c vstrip.o : s_types.h file_io.h in_buffer.h vstrip.h vstrip.cPokud spustím příkaz
make
, skončí to takto:
gcc -g file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o vstrip vstrip.o: In function `vs_get_time': vstrip.c:(.text+0x77b): undefined reference to `fmod' vstrip.c:(.text+0x813): undefined reference to `fmod' vstrip.c:(.text+0x83e): undefined reference to `fmod' vstrip.c:(.text+0x94b): undefined reference to `fmod' vstrip.c:(.text+0x978): undefined reference to `fmod' vstrip.o:vstrip.c:(.text+0x9af): more undefined references to `fmod' follow collect2: ld returned 1 exit status make: *** [vstrip] Error 1Našel jsem si, že lze tuto chybu vyřešit tím, že se místo
gcc
použije g++
. Pokud po této havárii nahradím počáteční CC:=gcc
za CC:=g++
, doběhne to do konce a program se zkompiluje. Na počátku to zaměnit nemohu, protože pak by se pro změnu nepřeložily ostatní věci. Chtěl bych to nacpat do PKGBUILDu
. Zatím tam mám:
make -i || return 1 patch -p0 < ../patch-vstrip.diff || return 1 make || return 1což sice funguje, ale uznáte, že je to … ehm, velmi nehezké
Takže můj dotaz zní, jak upravit Makefile, aby při kompilaci vstrip.c
použil g++
V man fmod
se píše Link with -lm - takže bych
$(CC) -g file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o vstrip
nahradil za
$(CC) -g -lm file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o $@
A pokud to má být jóó hezký, tak to udělat takhle
LDFLAGS=-lm ... $(CC) $(CFLAGS) $(LDFLAGS) file_io.o in_buffer.o main.o parse_ifo.o vstrip.o -o $@
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.