编译Trans-Proteomic Pipeline出现boost::iostreams未定义引用错误怎么办
问题解决方案
这个错误是链接阶段无法找到带zlib支持的boost_iostreams库导致的,按以下步骤操作即可解决:
步骤1:确认基础依赖已安装
先确保系统已安装zlib开发包和带zlib功能的boost-iostreams开发包:
- Debian/Ubuntu 系列发行版执行:
sudo apt install libboost-iostreams-dev zlib1g-dev - CentOS/RHEL/Fedora 系列发行版执行:
sudo dnf install boost-iostreams-devel zlib-devel
步骤2:编译时直接传入参数(无需修改Makefile)
无需手动修改Makefile文件,执行make命令时直接传入编译链接参数即可:
如果你的boost安装在系统默认路径,执行:
make clean make all CXXFLAGS="${CXXFLAGS} -lboost_iostreams -lz" make install CXXFLAGS="${CXXFLAGS} -lboost_iostreams -lz"
如果你的boost是手动编译安装到自定义路径(例如/opt/boost),执行:
make clean make all CXXFLAGS="${CXXFLAGS} -I/opt/boost/include" LDFLAGS="${LDFLAGS} -L/opt/boost/lib -lboost_iostreams -lz" make install CXXFLAGS="${CXXFLAGS} -I/opt/boost/include" LDFLAGS="${LDFLAGS} -L/opt/boost/lib -lboost_iostreams -lz"
步骤3:可选:修改配置文件永久生效
如果需要长期使用自定义路径的boost,可以直接修改TPP源码根目录下的config.mk或Makefile.in文件:
- 找到
BOOST_INCDIR配置项,修改为你的boost头文件路径 - 找到
BOOST_LIBDIR配置项,修改为你的boost库文件路径 - 找到
LDFLAGS或EXTRA_LIBS配置项,追加-lboost_iostreams -lz
修改完成后重新执行./configure,再正常编译安装即可。
注意事项
- 若执行编译好的二进制文件时提示找不到boost库,可将boost库路径追加到
/etc/ld.so.conf文件中,执行sudo ldconfig刷新缓存即可。 - 如果执行以上操作后仍然报错,可确认当前安装的boost版本是否符合TPP对应版本的要求,版本不兼容也会导致符号找不到的问题,安装匹配的boost版本即可解决。
内容的提问来源于stack exchange,提问作者Vranvs
相关产品推荐
相关产品推荐

