Linux下如何将CLion内置终端环境配置为与系统终端一致
CLion内置终端执行脚本异常问题解决方案
问题复现
测试脚本内容
compile_test.sh内容如下:
#!/bin/bash if [ ${USER} == "mzflrx" ] then LLVM_PATH="/home/mzflrx/Downloads/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04" else LLVM_PATH="/home/devin812/文档/clang+llvm-7.0.0-x86_64-linux-gnu-ubuntu-16.04" fi # 生成待保护的字节码 ${LLVM_PATH}/bin/clang -o3 -emit-llvm test.c -c -o test.bc # 生成可执行文件(保护前) ${LLVM_PATH}/bin/clang test.bc -o test -lpthread
异常报错
系统终端执行脚本正常,CLion内置终端执行时报错如下:
/home/mzflrx/Downloads/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory /home/mzflrx/Downloads/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory /home/mzflrx/Downloads/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/llvm-dis: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
排查现象
两个终端执行cd /usr/lib && ls输出内容完全不一致,CLion内置终端输出内容为精简文件列表,系统终端输出为完整文件列表。
根因分析
绝大多数情况是CLion通过Snap、Flatpak这类沙箱化软件包安装,运行时处于独立的容器环境,和宿主系统的文件系统、环境变量隔离,因此无法读取宿主系统的libtinfo.so.5库,也看不到真实的/usr/lib目录内容。少数情况为CLion终端配置被修改,加载了错误的虚拟环境或启动参数。
解决方法
- 方案1:使用官方非沙箱版本CLion
卸载当前通过Snap/Flatpak安装的CLion,下载JetBrains官方独立tar.gz压缩包,解压后运行bin目录下的clion.sh启动程序,即可完全复用宿主系统的文件和环境变量,无隔离问题。 - 方案2:给沙箱版CLion开启宿主文件系统访问权限
若为Snap安装,执行命令:sudo snap connect clion:system-files hostfs-all
若为Flatpak安装,执行命令:flatpak override --filesystem=host com.jetbrains.CLion
执行完成后重启CLion即可。 - 方案3:临时修复库缺失问题
在系统终端执行find /usr -name "libtinfo.so.5"找到库的真实路径,在compile_test.sh开头添加一行:export LD_LIBRARY_PATH=替换为找到的库所在目录:$LD_LIBRARY_PATH,即可临时解决库找不到的问题。 - 方案4:修正终端配置
打开File -> Settings -> Tools -> Terminal,将Shell路径修改为系统shell的绝对路径(如/bin/bash),取消所有虚拟环境自动激活的相关选项,保存后重启CLion。
内容的提问来源于stack exchange,提问作者李方意
相关产品推荐
相关产品推荐

