编译Shapeit5工具出现htslib头文件缺失错误求助
解决Shapeit5编译时缺失htslib头文件的问题
编译Shapeit5执行make后出现如下错误:
g++ -std=c++17 -O3 -mavx2 -mfma -D__COMMIT_ID__="3d97fcd" -D__COMMIT_DATE__="2023-10-02" -c src/containers/bitvector.cpp -o obj/bitvector.o -Isrc -I/opt/tools/htslib/opt/tools/htslib -I/opt/tools/boost_1_73_0/boost/include In file included from src/containers/bitvector.h:26,from src/containers/bitvector.cpp:23: src/utils/otools.h:52:10: fatal error: htslib/hts.h: No such file or directory 52 | #include <htslib/hts.h> | ^~~~~~~~~~~~~~ compilation terminated. make: *** [makefile:135: obj/bitvector.o] Error 1
问题原因
从编译命令可见,htslib的头文件路径被错误重复设置为/opt/tools/htslib/opt/tools/htslib,导致编译器无法定位htslib/hts.h。
解决步骤
- 打开项目根目录的
Makefile,找到定义HTSLIB_PATH的行,将其修改为实际的htslib安装路径,例如:
确认该路径下存在HTSLIB_PATH = /opt/tools/htslibinclude/htslib/hts.h文件。 - 若不想修改Makefile,可直接在执行make时手动指定正确路径:
make HTSLIB_PATH=/opt/tools/htslib - 若路径正确但仍找不到文件,重新编译安装htslib到指定路径,确保安装过程生成了include目录下的头文件。
- 若使用系统包管理器安装的htslib(如
libhtslib-dev),将HTSLIB_PATH设置为/usr即可,系统会自动查找标准头文件目录。
内容的提问来源于stack exchange,提问作者PallottO
相关产品推荐
相关产品推荐

