1.解决GLIBC_2.27报错问题

在ollama官网上,找到了linux上安装ollama的命令后,复制到自己的虚拟机中,下载完ollama,运行 ollama serve,提示以下报错:

1
2
3
4
5
6
7
ollama: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.25' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ollama)

查看系统内安装的glibc版本 然后再根据分析可得知 需要GLIBC_2.27支持,可是目前系统内却没有那么高的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 strings /lib64/libc.so.6 |grep GLIBC_

## 我的输出如下:
GLIBC 2.10
GLIBC 2.11
GLIBC 2.12
GLIBC 2.13
GLIBC 2.14
GLIBC 2.15
GLIBC 2.16
GLIBC 2.17
GLIBC PRIVATE
...

## 没有需要的 GLIBC 2.27 版本缺失

1.安装 GLIBC_2.28

执行以下命令,安装需要的GLIBC版本

1
2
3
4
5
6
wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
注:没有 wget的话,使用 yum install wget 安装

tar xf glibc-2.28.tar.gz
cd glibc-2.28/ && mkdir build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

运行到第四条命令时,报了这个错误

1
2
3
configure: error: 
*** These critical programs are missing or too old: compiler
*** Check the INSTALL file for required versions.

2.升级 gccmake

上面的报错是 gcc 和 make版本低导致的,升级以下

gcc升级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 升级GCC
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc*
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++

# 升级 make(默认为3 升级为4)
wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz
tar -xzvf make-4.3.tar.gz && cd make-4.3/
./configure --prefix=/usr/local/make
make && make install
cd /usr/bin/ && mv make make.bak
ln -sv /usr/local/make/bin/make /usr/bin/make

3.解决 yum install -y devtoolset-8-gcc* 报错

1
2
3
4
5
6
7
8
9
10
11
# 备份原始的源文件
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.blk

# 下载阿里云的源文件
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
注:如果没有wget命令,请先下载wget

# 清理缓存
yum clean all
yum makecache

4.解决yum makecache 报错

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 备份以下两个文件
cd /etc/yum.repos.d/
cp CentOS-SCLo-scl.repo CentOS-SCLo-scl.repo.blk
cp CentOS-SCLo-scl-rh.repo CentOS-SCLo-scl-rh.repo.blk
vim CentOS-SCLo-scl.repo
将此文件内容全部替换为以下内容:

# CentOS-SCLo-sclo.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-testing]
name=CentOS-7 - SCLo sclo Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/sclo/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-source]
name=CentOS-7 - SCLo sclo Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/sclo/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-debuginfo]
name=CentOS-7 - SCLo sclo Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
vim CentOS-SCLo-scl-rh.repo
将此文件内容全部替换为以下内容:

# CentOS-SCLo-rh.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-testing]
name=CentOS-7 - SCLo rh Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-source]
name=CentOS-7 - SCLo rh Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/rh/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-debuginfo]
name=CentOS-7 - SCLo rh Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

重新 yum makecache

img

5.继续升级 gccmake

按顺序继续执行序号2中升级make命令,从yum install -y devtoolset-8-gcc* 开始

img

gcc执行成功!!

6.继续升级 make

按顺序执行序号2中的命令,从 wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz 开始

7.重新执行以下命令

1
2
cd /root/glibc-2.27/build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

img

执行成功!!

8.继续更新

1
2
make && make install
注:过程较长,耐心等待

完成后再执行

ollama -v

1
2
3
4
5
6
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.25' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ollama)

GLIBC_2.27报错解决了

2.CentOS 7 下 Ollama 启动时报 GLIBCXX / CXXABI 版本不匹配的完整解决方案

1. 问题背景

在 CentOS 7 上运行 ollama -v 报错:

1
2
3
4
5
6
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.25' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ollama)
ollama: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ollama)

原因: CentOS 7 自带 GCC 4.8.5,对应的 libstdc++.so.6 太老(只支持到 GLIBCXX_3.4.19),而 Ollama 是用 GCC 9+ 编译的,依赖更高版本的 C++ ABI。

2. 解决思路

升级系统自带 GCC 风险大(可能导致系统组件不可用),所以我们采用旁路方案

  1. 安装一个独立的新版 libstdc++.so.6(不替换系统的旧版本,避免破坏系统)。
  2. 启动 Ollama 时,通过 LD_LIBRARY_PATH 优先加载新版本的库。
  3. 编写一键启动脚本,后续使用更方便。

3. 具体解决步骤

3.1 安装 Miniconda

1
2
curl -fsSLo /tmp/miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash /tmp/miniconda.sh -b -p /opt/miniconda

3.2 创建一个只包含新 libstdc++ 的环境

1
/opt/miniconda/bin/conda create -y -n libstdcpp -c conda-forge libstdcxx-ng=12

这个环境会生成 /opt/miniconda/envs/libstdcpp/lib/libstdc++.so.6.0.30,支持到:

1
2
3
4
strings /opt/miniconda/envs/libstdcpp/lib/libstdc++.so.6 | grep GLIBCXX_3.4.25
# 输出:
# GLIBCXX_3.4.25
# CXXABI_1.3.11

3.3 测试 Ollama 是否能用新库运行

1
2
export LD_LIBRARY_PATH=/opt/miniconda/envs/libstdcpp/lib:$LD_LIBRARY_PATH
ollama -v

如果输出版本信息(或只是连接警告),说明库已正确加载。

3.4 编写一键启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
sudo tee /usr/local/bin/ollama-start >/dev/null <<'EOF'
#!/usr/bin/env bash
# 使用 Miniconda 提供的新版 libstdc++
export LD_LIBRARY_PATH=/opt/miniconda/envs/libstdcpp/lib:${LD_LIBRARY_PATH}

# 检查 ollama 服务是否已运行
if pgrep -x "ollama" >/dev/null; then
echo "✅ Ollama 服务已在运行"
else
echo "🚀 启动 Ollama 服务..."
nohup ollama serve > /var/log/ollama.log 2>&1 &
sleep 2
if pgrep -x "ollama" >/dev/null; then
echo "✅ Ollama 服务启动成功"
else
echo "❌ 启动失败,请查看 /var/log/ollama.log"
exit 1
fi
fi

# 如果传了参数,就直接调用 ollama
if [ $# -gt 0 ]; then
ollama "$@"
else
echo "提示:你可以用 'ollama-start run <模型>' 来直接运行模型"
fi
EOF

sudo chmod +x /usr/local/bin/ollama-start

4. 使用方法

启动服务

1
ollama-start

启动服务并直接运行命令

1
2
3
ollama-start -v
ollama-start list
ollama-start run llama3.2

查看日志

1
tail -f /var/log/ollama.log

5. 方案优势

  • 无风险:不替换系统的 libstdc++.so.6,不破坏现有程序。
  • 可移植:所有新库都放在 /opt/miniconda/envs/libstdcpp/lib,删除该环境即可回退。
  • 方便使用:一键启动脚本简化操作,后续升级 Ollama 或库版本也方便。

6. 总结

通过 Miniconda 独立安装 libstdc++ 新版本,并用 LD_LIBRARY_PATH 控制加载顺序,可以在 CentOS 7 这种老系统上无痛运行需要高版本 GLIBCXX 的程序(如 Ollama、某些现代编译的 C++ 应用)。

这样既保持了系统稳定,又解决了依赖版本问题,非常适合在生产环境或不方便升级操作系统的场景使用。

3.测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost ~]# ollama-start
🚀 启动 Ollama 服务...
✅ Ollama 服务启动成功
提示:你可以用 'ollama-start run <模型>' 来直接运行模型
[root@localhost ~]# ollama-start -v
✅ Ollama 服务已在运行
ollama version is 0.11.10
[root@localhost ~]# ollama-start list
✅ Ollama 服务已在运行
NAME ID SIZE MODIFIED
qwen2:0.5b 6f48b936a09f 352 MB 14 months ago
[root@localhost ~]# ollama-start run qwen2:0.5b
✅ Ollama 服务已在运行
>>> 你好你是谁
我是一个AI模型,没有实体身份。我是由阿里云研发的。如果你有其他问题需要帮助,请随时告诉我!

>>> /bye