Ubuntu20.04编译CaMa-Flood模型遇多类错误及gcc安装问题求助
解决Ubuntu 20.04编译CaMa-Flood及gcc-4.8.5安装的系列问题
一、CaMa-Flood编译初始错误处理
1. 脚本语法错误
- 检查
compile.sh换行符格式:Ubuntu默认用LF,若脚本是Windows的CRLF,执行dos2unix compile.sh转换。 - 定位报错行,检查语法细节:比如if语句的括号、分号是否正确,变量引用是否漏加
$,引号是否匹配。
2. 创建lib_dates.f90权限不足
- 优先修改当前目录权限:
sudo chmod 755 ./,确保用户有读写执行权限。 - 若脚本生成文件到系统目录,修改脚本中的输出路径为当前用户有权限的目录,或临时用
sudo ./compile.sh执行(注意sudo会切换环境变量,可能影响后续编译依赖)。
3. GNU Fortran版本不兼容
CaMa-Flood部分版本对gfortran版本有特定要求,不必直接降级到gcc-4.8.5,可先尝试适配版本:
- 查看CaMa-Flood官方文档确认推荐版本,Ubuntu 20.04仓库可直接安装gfortran-7/8:
sudo apt install gfortran-7 - 切换gfortran版本:
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-7 50 sudo update-alternatives --config gfortran - 若必须使用gcc-4.8.5,再处理后续libstdc++问题。
4. 链接时找不到-lnetcdff库
- 安装netCDF-Fortran开发包:
sudo apt install libnetcdff-dev - 若仍找不到,在
compile.sh中添加库路径配置:export LDFLAGS="-L/usr/lib/x86_64-linux-gnu $LDFLAGS" export CPPFLAGS="-I/usr/include $CPPFLAGS" - 验证netcdff安装:执行
pkg-config --libs netcdff,将输出内容追加到编译脚本的链接参数中。
二、gcc-4.8.5安装时libstdc++.so.6缺失CXXABI_1.3.8的解决
Ubuntu 20.04自带的libstdc++版本偏高,gcc-4.8.5编译依赖旧版CXXABI,可通过以下方式解决:
安装旧版libstdc++包:
sudo apt install libstdc++6:i386若仓库无对应版本,可下载
libstdc++6_4.8.5-4ubuntu8_amd64.deb手动安装。临时指定库路径:
在执行make前设置环境变量,让编译过程优先找到所需库:export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH编译gcc-4.8.5时静态链接libstdc++:
在./configure阶段添加参数:./configure --prefix=/usr/local/gcc-4.8.5 --enable-static-libstdc++之后再执行
make MAKEINFO="makeinfo --force"。手动补充缺失的库符号:
- 检查当前系统库的符号:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep CXXABI,确认无CXXABI_1.3.8。 - 下载旧版
libstdc++.so.6.0.20,复制到/usr/local/lib:sudo cp libstdc++.so.6.0.20 /usr/local/lib sudo ln -s /usr/local/lib/libstdc++.so.6.0.20 /usr/local/lib/libstdc++.so.6 - 设置环境变量优先加载该路径:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
- 检查当前系统库的符号:
内容的提问来源于stack exchange,提问作者Reepal
相关产品推荐
相关产品推荐

