Linux Makefile: неопределенная ссылка на 'gzbuffer' (где LIB = -lz)

Я пытаюсь установить программу ( vcftools), для которой Makefile выглядит следующим образом:

# Make file for vcftools
# Author: Adam Auton
# ($Revision: 230 $)

# Compiler
CPP = g++
# Output executable
EXECUTABLE = vcftools
# Flag used to turn on compilation of PCA routines
ifndef VCFTOOLS_PCA
        VCFTOOLS_PCA = 0
endif
# Compiler flags
CPPFLAGS = -O2 -Wall -Wextra -D_FILE_OFFSET_BITS=64
#CPPFLAGS = -g 
# Included libraries (zlib)
#LIB = -lz 
LIB = -lz -I/usr/local/include/ -L/usr/local/lib/


OBJS = vcftools.o vcf_file.o vcf_entry.o \
                vcf_entry_getters.o vcf_entry_setters.o \
                vcf_file_filters.o vcf_file_output.o \
                vcf_file_format_convert.o \
                vcf_file_diff.o parameters.o \
                vcf_file_index.o \
                output_log.o

Мне не удалось заставить этот Makefile работать правильно, но вместо этого я получил сообщение об ошибке:

vcf_file.cpp:(.text+0xe72): undefined reference to `gzbuffer'
collect2: ld returned 1 exit status
make[1]: *** [vcftools] Error 1
make[1]: Leaving directory `/home/Public/Packages/vcftools_0.1.10/cpp'
/bin/sh: 2: cd: can't cd to perl
make: *** [install] Error 2

Я думаю, что часть проблемы заключается в том, что есть ошибка, связанная с моим путем установки zlib. Я пытался изменить пути -I и -L, чтобы они соответствовали моей установке zlib, но мне не повезло (есть много папок, которые, кажется, содержат файлы zlib).

Кроме того, при поиске на других форумах, связанных с этой программой ( здесь), кажется, что мне может понадобиться zlib1g-dev. zlib1g-dev находится на моем компьютере (он отображается в моем программном центре Ubuntu), но не появляется при входе:

root@root:/home/Public/Packages/vcftools_0.1.10/cpp# whereis zlib1g-dev
zlib1g-dev:
root@root:/home/Public/Packages/vcftools_0.1.10/cpp# which zlib1g-dev

Я рассмотрел удаление и переустановку zlib, но похоже, что несколько программ зависят от него. При попытке запустить установку или удаление я получаю следующее сообщение:

sudo apt-get установить zlib-devel

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package zlib-devel

Я не уверен, что проблема заключается в том, где zlib установлен на моем компьютере, ошибка в установке или что-то еще полностью над моей головой. Любые предложения будут ценны. Спасибо.

6 ответов

В моей системе (Ubuntu 12.04.3 LTS) это была проблема с расположением библиотеки.
Убедитесь, что zlib1g-dev установлен.
В файле vcftools_whwhat /cpp/Makefile измените

LIB = -lz

в

LIB = -L/usr/local/lib/ -lz

Это сработало для меня, поместив это в мой Makefile:

Между прочим, я потратил 10 минут на то, чтобы он не работал, потому что я остановил lib в конце этой строки и получил только корневой путь.

LIBS = -L / tools / hpclib / zlib-1.2.8 / lib -lz -lgomp (работал)

LIBS = -L / tools / hpclib / zlib-1.2.8 -lz -lgomp (не сработало)

Надеюсь, это кому-то поможет. Это было для компиляции программы под названием stacks 2.41

Я думаю, что вы пропустите пакет devel. Это не называется zlib-devel, как вы пытались,

sudo apt-get установить zlib-devel

но zlib1g-dev. Итак, команда для запуска:

sudo apt-get install zlib1g-dev

В этой области есть ошибка в obuntu, когда объявление определенной библиотеки должно появляться после объявления пути к библиотеке.

В вашем make-файле -lz можно разместить только после -L/usr/local/lib/

Я бы предложил изменить объявление LIB на приведенное ниже - это должно решить проблему

LIB = -I/usr/local/include/ -L/usr/local/lib/ -lz

Я нашел это путем поиска по неопределенной ссылке на gzbuffer var. Произошла ошибка при компиляции ImageMagick из исходного кода на Linux-системе CentOS-6.6. Я должен был сделать две вещи: 1) Согласно предложению повторно. Ubuntu, от travc, вы редактируете Makefile, ищите "LIBS = " (который в моем случае был пустым) и меняете его на "LIBS = -L/usr/local/lib -lz". Это дало мне чистую компиляцию. Запустил "make install", чтобы установить вещь, и она не удалась во время выполнения. 2) Исправление было в том, чтобы перейти к / usr / local / lib и просто запустить "ldconfig" из командной строки. "ldconfig" обновляет динамические привязки среды выполнения компоновщика (подробности читайте на странице "man"). Чтобы убедиться, что ImageMagick установлен нормально, запустив "display" в командной строке в X-windows. (Если у вас установлен ImageMagick для работы prgm "display", Python и его различные инструменты для генерации графики / изображений будут использовать его автоматически, позволяя визуализировать и просматривать сложные изображения, размер которых превышает размер экрана).

Для vcftools пришлось изменить после настройки:

  1. Makefile

  2. src / Makefile

  3. src / cpp / Makefile

И в каждом зайдите в LIBS и поставьте:

LIBS = -L/tools/hpclib/zlib-1.2.8/lib -lz -lgomp

Это на centos с zlib, скомпилированным в указанном выше месте.

Другие вопросы по тегам