Octave 9.2.0编译LAPACK链接异常及未定义引用问题求助
问题描述
在RedHat 7非root环境下编译安装Octave 9.2.0到指定目录,依赖配置如下:
- BLAS、LAPACK使用系统OpenBLAS(版本0.2.20)
- FFTW3、zlib手动安装到指定路径
执行的configure命令:
./configure --prefix=/path_to/octave-9.2.0 --with-qt=5 --with-blas=/path_to/openblas-0.2.20/lib/libopenblas.so --with-lapack=/path_to/openblas-0.2.20/lib/libopenblas.so --with-fftw3-includedir=/path_to/fftw-3.3.10/include --with-fftw3-libdir=/path_to/fftw-3.3.10/lib --with-fltk=/path_to/fltk-1.3.8 --with-fftw3f-includedir=/path_to/fftw-3.3.10/include --with-fftw3f-libdir=/path_to/fftw-3.3.10/lib --with-z-includedir=/path_to/zlib-1.2.11/include --with-z-libdir=/path_to/zlib-1.2.11/lib --without-curl --disable-docs
遇到的问题:
- 不指定zlib路径时,编译报错
uncompress2函数缺失 - 指定zlib路径后执行
make,出现未定义引用错误:
/bin/ld: liboctave/.libs/liboctave.so: undefined reference to `zgetri_' ..other libraries... /bin/ld: libinterp/.libs/liboctinterp.so: undefined reference to `std::ios_base_library_init()' /bin/ld: libinterp/.libs/liboctinterp.so: undefined reference to `uncompress2@ZLIB_1.2.9'
已排查:用ldd检查相关库未发现缺失,询问遗漏的配置、类似编译经验及是否需要更新OpenBLAS。
解决思路与方案
针对
zgetri_未定义引用:zgetri_是LAPACK的矩阵求逆函数,OpenBLAS虽集成LAPACK,但0.2.20这类旧版本可能存在LAPACK接口不全或编译时未启用完整支持的问题。- 检查OpenBLAS编译参数,确认是否添加了
USE_LAPACK=1或BUILD_LAPACK=1,确保完整编译LAPACK模块 - 建议升级OpenBLAS到0.3.20+版本,新版本对LAPACK的兼容性和完整性更好
- 检查OpenBLAS编译参数,确认是否添加了
针对
std::ios_base_library_init()未定义引用:
RedHat 7默认GCC版本(4.8.5)过低,无法满足Octave 9.2.0对C++标准的要求。- 安装并启用高版本GCC(如9+),通过环境变量指定编译器:
export CC=/path_to/gcc/bin/gcc export CXX=/path_to/gcc/bin/g++ - 重新执行configure,确保编译器被正确识别
- 安装并启用高版本GCC(如9+),通过环境变量指定编译器:
针对
uncompress2@ZLIB_1.2.9未定义引用:
链接器可能优先加载了系统自带的旧版zlib(RedHat 7默认版本低于1.2.9),而非手动安装的1.2.11。- 配置环境变量强制指定zlib路径:
export CPPFLAGS="-I/path_to/zlib-1.2.11/include" export LDFLAGS="-L/path_to/zlib-1.2.11/lib -Wl,-rpath=/path_to/zlib-1.2.11/lib" - 重新执行configure和make,确保链接器优先使用指定的zlib库
- 配置环境变量强制指定zlib路径:
额外注意事项:
- 编译前临时将手动安装的依赖库路径加入
LD_LIBRARY_PATH,避免检测失败 - 查看configure生成的
config.log,搜索依赖库的检测日志,确认是否正确识别指定版本 - 若使用高版本GCC,需确保FLTK、Qt5等依赖也是用同版本编译器编译的,避免链接冲突
- 编译前临时将手动安装的依赖库路径加入
内容的提问来源于stack exchange,提问作者Ste3191
相关产品推荐
相关产品推荐

