You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从源码构建GDAL时出现与OpenSSL相关的链接错误

解决Redhat UBI8.6 Conda环境下GDAL源码构建时libssh与OpenSSL链接错误

问题场景

在Redhat UBI8.6的Conda Python3.8环境中,搭配proj8.2.1源码构建GDAL(3.4.1及其他版本)时,出现libssh.so.4找不到OpenSSL特定符号的链接错误,核心错误信息如下:

/usr/lib64/libssh.so.4: undefined reference to `EVP_KDF_ctrl@OPENSSL_1_1_1b'
/usr/lib64/libssh.so.4: undefined reference to `EVP_KDF_CTX_free@OPENSSL_1_1_1b'
collect2: error: ld returned 1 exit status

解决方案

1. 禁用GDAL的libssh支持(最快绕开)

直接在configure阶段关闭ssh模块,避免链接系统libssh:

./configure --prefix=$CONDA_PREFIX --with-netcdf=$CONDA_PREFIX --with-proj=$CONDA_PREFIX --with-curl=no --with-libssh=no
make -j24
make install

2. 指定使用系统OpenSSL构建

强制GDAL链接系统的OpenSSL,匹配系统libssh的依赖:

./configure --prefix=$CONDA_PREFIX --with-netcdf=$CONDA_PREFIX --with-proj=$CONDA_PREFIX --with-curl=no --with-openssl=/usr
make -j24
make install

3. 调整环境变量确保库路径正确

临时重置LD_LIBRARY_PATH,让系统库和conda库的顺序正确,避免链接混乱:

export LD_LIBRARY_PATH=/usr/lib64:$CONDA_PREFIX/lib
# 重新执行配置和构建
./configure --prefix=$CONDA_PREFIX --with-netcdf=$CONDA_PREFIX --with-proj=$CONDA_PREFIX --with-curl=no
make -j24
make install

4. 使用Conda提供的libssh替代系统库

在conda环境中安装兼容的libssh,让GDAL链接conda版本的库,避免系统库冲突:

conda install -c conda-forge libssh
# 重新配置构建,此时会自动识别conda环境中的libssh
./configure --prefix=$CONDA_PREFIX --with-netcdf=$CONDA_PREFIX --with-proj=$CONDA_PREFIX --with-curl=no
make -j24
make install

问题原因

错误本质是库依赖版本/路径不匹配:

  • 系统的libssh.so.4依赖OpenSSL 1.1.1b引入的特定符号,但构建GDAL时可能链接到了conda环境中的OpenSSL,或者库路径顺序导致找不到正确的符号;
  • 虽然系统OpenSSL版本是1.1.1k(理论上包含1.1.1b的符号),但链接路径错误导致符号无法被解析。

内容的提问来源于stack exchange,提问作者Shejo284

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:46:01