ZLIB编译问题

6

我想编译一些第三方软件,但是显然遇到了ZLIB的问题。

请参见下文:

 $sudo make
    gcc -Wall -pedantic -DVERSION=1.2 -lz -O3 sliding.o trim_single.o trim_paired.o sickle.o -o sickle
    trim_paired.o: In function `ks_getuntil':
    trim_paired.c:(.text+0x78): undefined reference to `gzread'
    trim_paired.o: In function `kseq_read':
    trim_paired.c:(.text+0x48d): undefined reference to `gzread'
    trim_paired.c:(.text+0x4dc): undefined reference to `gzread'
    trim_paired.c:(.text+0x60a): undefined reference to `gzread'
    trim_paired.c:(.text+0x687): undefined reference to `gzread'
    trim_paired.o: In function `paired_main':
    trim_paired.c:(.text+0xc62): undefined reference to `gzopen'
    trim_paired.c:(.text+0xc83): undefined reference to `gzopen'
    trim_paired.c:(.text+0x1142): undefined reference to `gzclose'
    trim_paired.c:(.text+0x114f): undefined reference to `gzclose'
    trim_single.o: In function `ks_getuntil':
    trim_single.c:(.text+0x78): undefined reference to `gzread'
    trim_single.o: In function `single_main':
    trim_single.c:(.text+0x688): undefined reference to `gzopen'
    trim_single.c:(.text+0x8ad): undefined reference to `gzread'
    trim_single.c:(.text+0x8f5): undefined reference to `gzread'
    trim_single.c:(.text+0xb11): undefined reference to `gzread'
    trim_single.c:(.text+0xb96): undefined reference to `gzread'
    trim_single.c:(.text+0xc58): undefined reference to `gzclose'
    collect2: ld returned 1 exit status
    make: *** [build] Error 1

我正在使用Ubuntu,并且已经在/usr/local/lib中安装了ZLIB 1.2.6。

这是Makefile:

PROGRAM_NAME = sickle
VERSION = 1.2
CC = gcc
CFLAGS = -Wall -pedantic -DVERSION=$(VERSION)
DEBUG = -g
OPT = -O3
ARCHIVE = $(PROGRAM_NAME)_$(VERSION)
LDFLAGS = -lz
SDIR = src

.PHONY: clean default build distclean dist debug

default: build

sliding.o: $(SDIR)/sliding.c $(SDIR)/kseq.h $(SDIR)/sickle.h
    $(CC) $(CFLAGS) $(OPT) -c $(SDIR)/$*.c

trim_single.o: $(SDIR)/trim_single.c $(SDIR)/sickle.h $(SDIR)/kseq.h
    $(CC) $(CFLAGS) $(OPT) -c $(SDIR)/$*.c

trim_paired.o: $(SDIR)/trim_paired.c $(SDIR)/sickle.h $(SDIR)/kseq.h
    $(CC) $(CFLAGS) $(OPT) -c $(SDIR)/$*.c

sickle.o: $(SDIR)/sickle.c $(SDIR)/sickle.h
    $(CC) $(CFLAGS) $(OPT) -c $(SDIR)/$*.c

clean:
    rm -rf *.o $(SDIR)/*.gch ./sickle

distclean: clean
    rm -rf *.tar.gz

dist:
    tar -zcf $(ARCHIVE).tar.gz src Makefile

build: sliding.o trim_single.o trim_paired.o sickle.o
    $(CC) $(CFLAGS) $(LDFLAGS) $(OPT) $? -o sickle

debug:
    $(MAKE) build "CFLAGS=-Wall -pedantic -g -DDEBUG"

任何帮助都将不胜感激;)
谢谢。

为什么不使用系统提供的zlib1gzlib1g-dev软件包? - sarnold
@sarnold:zlib1g已经安装好了,我只是对“zlib”和“zlib1g”感到困惑。不知道它们是否完全相同... - pasta
嘿,那个更改是在1998年进行的(根据apt-get changelog zlib1g判断) - 大约在libc5libc6替换的时候。也许它们有关系?如果在运行apt-get install zlib1g-dev后您的程序编译成功,则可以忽略/usr/local/中的版本。 - sarnold
@sarnold 我尝试了 apt-get install zlib1g-dev 但是它无法编译 :( - pasta
1个回答

10

我自己找到了答案! 它的作用是改变:

$(CC) $(CFLAGS) $(LDFLAGS) $(OPT) $? -o sickle
为确保准确性,请提供需要翻译的完整内容。
$(CC) $(CFLAGS)  $(OPT) $? -o sickle $(LDFLAGS)

必须将-lz选项放在最后。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接