方案二:从源码编译 GCC 9(最稳妥、最通用)
如果不想冒险修改系统文件,源码编译是官方文档和社区都推荐的可靠方法,虽然耗时,但能保证 100% 成功。
操作步骤:
安装编译所需的依赖:
bash
sudo apt update
sudo apt install build-essential libgmp-dev libmpfr-dev libmpc-dev libisl-dev flex bison zlib1g-dev
下载并解压 GCC 9.5.0 源码(9.x 系列的最新版本):
bash
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.xz
tar -xvf gcc-9.5.0.tar.xz
cd gcc-9.5.0
自动下载其它依赖源码:
bash
./contrib/download_prerequisites
创建独立的构建目录并配置:
bash
cd …
mkdir gcc-build
cd gcc-build
…/gcc-9.5.0/configure --prefix=/opt/gcc-9.5 --enable-languages=c,c++ --disable-multilib
–prefix=/opt/gcc-9.5 指定了安装路径,不会覆盖系统自带的 GCC 8.3。
开始编译(这一步耗时会很长,请耐心等待):
bash
make -j$(nproc)
安装:
bash
sudo make install
配置新版本 GCC 的环境变量:
为了让 codearts-agent 和其他程序优先使用新版的 libstdc++,你可以将其路径加入系统库搜索路径中。
bash
echo ‘export LD_LIBRARY_PATH=/opt/gcc-9.5/lib64:$LD_LIBRARY_PATH’ >> ~/.bashrc
source ~/.bashrc
验证与后续
完成上述任一方案后,再次运行 gcc --version 应该能看到 GCC 9.x 的版本信息,说明新版的 libstdc++ 已可用。此时,你可以重新尝试安装 codearts-agent:
bash
sudo dpkg -i codearts-agent-linux-arm64-26.4.4-42d8abe.deb
将新的 bin 目录添加到 PATH 的开头
echo ‘export PATH=/opt/gcc-9.5/bin:$PATH’ >> ~/.bashrc
同时确保库路径正确(注意是 lib64 还是 lib)
echo ‘export LD_LIBRARY_PATH=/opt/gcc-9.5/lib64:$LD_LIBRARY_PATH’ >> ~/.bashrc
重新加载配置
source ~/.bashrc
再次检查 gcc 版本
gcc --version
查看当前 gcc 指向哪里
which gcc
如果仍然指向 /usr/bin/gcc,可以创建符号链接(可选)
sudo update-alternatives --install /usr/bin/gcc gcc /opt/gcc-9.5/bin/gcc 90
sudo update-alternatives --install /usr/bin/g++ g++ /opt/gcc-9.5/bin/g++ 90
然后选择默认版本
sudo update-alternatives --config gcc
- 验证 libstdc++6 的版本
最重要的是确认新的 libstdc++.so.6 是否已经可用:
bash
查找新编译的 libstdc++ 库
find /opt/gcc-9.5 -name “libstdc++.so.*”
查看当前系统使用的 libstdc++ 版本
strings /opt/gcc-9.5/lib64/libstdc++.so.6 | grep CXXABI
检查是否能被系统识别
ldconfig -p | grep libstdc++
5. 为了让 codearts-agent 能找到新的库,需要更新系统库缓存
bash
创建配置文件让系统知道新库的位置
echo ‘/opt/gcc-9.5/lib64’ | sudo tee /etc/ld.so.conf.d/gcc-9.5.conf
更新动态链接器缓存
sudo ldconfig
验证系统范围内的 libstdc++ 版本
ldconfig -p | grep libstdc++ | head -5
6. 临时测试(不影响系统默认设置)
如果你不想改变系统默认的 GCC,只是为了安装 codearts-agent,可以临时使用新的库路径来安装:
bash
使用 LD_LIBRARY_PATH 临时指定库路径来安装
sudo LD_LIBRARY_PATH=/opt/gcc-9.5/lib64:$LD_LIBRARY_PATH dpkg -i codearts-agent-linux-arm64-26.4.4-42d8abe.deb
7. 或者创建软链接到系统目录(最直接的方法)
bash
备份原始库
sudo mv /usr/lib/aarch64-linux-gnu/libstdc++.so.6 /usr/lib/aarch64-linux-gnu/libstdc++.so.6.backup
创建软链接指向新库
sudo ln -s /opt/gcc-9.5/lib64/libstdc++.so.6 /usr/lib/aarch64-linux-gnu/libstdc++.so.6
验证
ls -la /usr/lib/aarch64-linux-gnu/libstdc++.so.6
owner@owner-PC:~/Desktop$ echo ‘/opt/gcc-9.5/lib64’ | sudo tee /etc/ld.so.conf.d/gcc-9.5.conf # 创建配置文件让系统知道新库的位置
/opt/gcc-9.5/lib64
owner@owner-PC:~/Desktop$ sudo ldconfig# 更新动态链接器缓存
sudo: ldconfig#:找不到命令
owner@owner-PC:~/Desktop$ sudo ldconfig # 更新动态链接器缓存
ldconfig: /usr/lib/libtinyxml2.so.10 不是符号链接
owner@owner-PC:~/Desktop$ ldconfig -p | grep libstdc++ | head -5 # 验证系统范围内的 libstdc++ 版本
libstdc++.so.6 (libc6,AArch64) => /lib/aarch64-linux-gnu/libstdc++.so.6
libstdc++.so.6 (libc6,AArch64) => /opt/gcc-9.5/lib64/libstdc++.so.6
libstdc++.so (libc6,AArch64) => /opt/gcc-9.5/lib64/libstdc++.so
owner@owner-PC:~/Desktop$ sudo LD_LIBRARY_PATH=/opt/gcc-9.5/lib64:$LD_LIBRARY_PATH dpkg -i codearts-agent-linux-arm64-26.4.4-42d8abe.deb # 使用 LD_LIBRARY_PATH 临时指定库路径来安装
DeepSeek推荐方案:修改 deb 包的依赖(最安全) 这个测试是成功的。
1. 解压并修改 deb 包
# 创建工作目录mkdir~/codearts-modifycd~/codearts-modify# 解压 deb 包dpkg-deb-R~/Desktop/codearts-agent-linux-arm64-26.4.4-42d8abe.deb package/查看并修改控制文件
nanopackage/DEBIAN/control2. 修改依赖关系
在打开的 control 文件中,找到类似这样的行:
Depends: libstdc++6 (>= 9)
将其改为:(我的系统中 libstdc++6:arm64 的版本为 8.3.0.13-deepin1)
Depends: libstdc++6 (>= 8.3.0.13-deepin1)
或者更宽松的版本:
Depends: libstdc++6 (>= 8)
保存并退出(Ctrl+X,然后 Y,回车)。
3. 重新打包
# 重新构建 deb 包dpkg-deb-bpackage/ codearts-agent-modified.deb# 查看新包ls-lacodearts-agent-modified.deb4. 安装修改后的包
sudodpkg-icodearts-agent-modified.deb5. 验证安装
如果安装成功,检查程序是否能正常运行:
# 查看是否安装成功dpkg-l|grepcodearts-agent尝试运行(如果知道命令名)
# 通常会安装在 /opt 或 /usr/bin 下whichcodearts-agent2>/dev/null||find/opt-name"codearts*"-typef-executable2>/dev/null
确实已经安装成功了,并且正常启动了,但是不知道在后面的运行中会不会出现类似 version ‘GLIBCXX_3.4.26’ not found 的错误。
第一个问题:不能调用输入法,只能英文了,但是没有报错,只是不能输入中文了。
问题2,点击对话框中的上传图片按钮,闪退。
6.运行时注意事项
虽然安装成功了,但运行 codearts-agent 时可能仍然需要新的 libstdc++ 库。如果运行时出现类似以下错误:
error while loading shared libraries: libstdc++.so.6: version GLIBCXX_3.4.26 not found
undefined symbol: …
解决方案:创建启动脚本
bash
找到实际的程序路径
CODEARTS_PATH=$(which codearts-agent 2>/dev/null || find /opt -name “codearts-agent” -type f -executable 2>/dev/null | head -1)
echo “找到程序: $CODEARTS_PATH”
如果找到了,创建包装脚本
if [ -n “KaTeX parse error: Expected 'EOF', got '#' at position 28: …H" ]; then #̲ 备份原始程序 sud…CODEARTS_PATH” “${CODEARTS_PATH}.original”
# 创建包装脚本 sudo tee "$CODEARTS_PATH" << 'EOF'#!/bin/bash
获取脚本所在目录的真实路径
SCRIPT_DIR=(dirname"(dirname "(dirname"(readlink -f "0")")exportLDLIBRARYPATH=/opt/gcc−9.5/lib64:0")") export LD_LIBRARY_PATH=/opt/gcc-9.5/lib64:0")")exportLDLIBRARYPATH=/opt/gcc−9.5/lib64:LD_LIBRARY_PATH
exec “SCRIPTDIR/codearts−agent.original""{SCRIPT_DIR}/codearts-agent.original" "SCRIPTDIR/codearts−agent.original""@”
EOF
# 添加执行权限 sudo chmod +x "$CODEARTS_PATH" echo "已创建包装脚本,将自动使用新版本的 libstdc++"fi
测试运行
bash
尝试运行程序
codearts-agent --help 2>&1 | head -20
清理工作(可选)
如果一切正常,可以清理临时文件:
bash
清理修改 deb 包的工作目录
rm -rf ~/codearts-modify
如果需要,可以删除编译 GCC 的源码(节省空间)
rm -rf ~/Desktop/gcc-9.5.0 ~/Desktop/gcc-build
总结
✅ 依赖问题已解决 - 通过修改 deb 包的依赖关系,成功绕过了 dpkg 的强制版本检查
✅ 安装成功 - codearts-agent 已经安装到系统中
⚠️ 运行时可能需要新库 - 如果运行时出错,使用上面创建的包装脚本即可
现在你可以尝试启动 codearts-agent 了。如果遇到任何运行时错误,请告诉我具体的错误信息,我会帮你解决!