Linux Makefile:对'gzbuffer'的未定义引用(其中LIB = -lz)

时间:2013-01-18 18:48:47

标签: zlib vcftools

我正在尝试安装一个程序(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文件)。

此外,通过搜索与此程序相关的其他论坛(here),似乎我可能需要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 install zlib-devel

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

我不确定问题出在我的计算机上安装zlib的位置,安装中的错误,还是其他完全超出我头脑的问题。任何建议将不胜感激。谢谢。

6 个答案:

答案 0 :(得分:1)

在我的系统(Ubuntu 12.04.3 LTS)上,这是一个lib位置问题 确保已安装zlib1g-dev 在vcftools_whatever / cpp / Makefile中,更改

LIB = -lz

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

答案 1 :(得分:0)

该区域的obuntu中存在一个错误,在声明库路径后,必须出现特定库的声明。

在您的makefile中,-lz只能在 -L/usr/local/lib/之后放置

我建议将LIB声明更改为下面的声明 - 这应该可以解决问题

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

答案 2 :(得分:0)

我通过搜索对gzbuffer var的未定义引用发现了这一点。从CentOS-6.6 Linux盒上的源代码编译ImageMagick时出错。我必须做两件事:1)根据建议。 Ubuntu,由travc编写,您编辑Makefile,查找“ LIBS =”(在我的情况下为空白),并将其更改为“ LIBS = -L / usr / local / lib -lz”。那给了我干净的编译。跑“ make install”安装东西,但在运行时失败。 2)解决方法是将CD刻录到/ usr / local / lib,然后从命令行运行“ ldconfig”。 “ ldconfig”更新动态链接程序运行时绑定(有关详细信息,请阅读“ man”页面。)您可以通过在X-windows的命令行中运行“ display”来确认ImageMagick已正确安装。 (如果安装了ImageMagick以便“显示”程序可以工作,Python及其各种图形/图像生成工具将自动使用它,从而允许渲染和检查超出屏幕尺寸的复杂图像。)

答案 3 :(得分:0)

我想你错过了开发包。并非您尝试过的那样称为zlib-devel,

  

sudo apt-get install zlib-devel

但是zlib1g-dev。因此,您要运行的命令是:

sudo apt-get install zlib1g-dev

答案 4 :(得分:0)

这对我有用,将其放在我的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的程序

答案 5 :(得分:0)

对于vcftools不得不修改,配置后:

  1. 生成文件

  2. src/Makefile

  3. src/cpp/Makefile

在每个中,转到 LIBS 并输入:

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

这是在centos上,zlib编译在上面的特定位置。