编译与 netcdf 关联的程序时 Dwarf 版本出错

Posted

技术标签:

【中文标题】编译与 netcdf 关联的程序时 Dwarf 版本出错【英文标题】:Error with Dwarf version when compile program associated with netcdf 【发布时间】:2016-09-08 09:01:33 【问题描述】:

我正在尝试编译一个作为化学排放预处理器的程序。

这是其编译过程的官方教程。



我已经上传了原源代码here。

预定义netcdf_dir,源代码应该可以编译好。

但是当我使用./make_util megan_bio_emiss 时,错误显示如下:

=========================================================================
Using gfortran fortran compiler
=============================================================================
=============================================================================
netcdf top level directory = /disk2/hyf/lib/netcdf
=============================================================================
gfortran -g -ffree-line-length-none  -c -I/disk2/hyf/lib/netcdf/include misc_definitions_module.f90
gfortran -g -ffree-line-length-none  -c -I/disk2/hyf/lib/netcdf/include constants_module.f90
gfortran -g -ffree-line-length-none  -c -I/disk2/hyf/lib/netcdf/include bio_types.f90 
......
...... 
......

gfortran -o megan_bio_emiss misc_definitions_module.o constants_module.o   bio_types.o area_mapper.o bio_emiss.o -L/disk2/hyf/lib/netcdf/lib -lnetcdf -lnetcdff 
/usr/bin/ld: Dwarf Error: found dwarf version '4', this reader only handles version 2 information.
/disk2/hyf/lib/netcdf/lib/libnetcdff.a(fort-attio.o): In function `nf_put_att_text_':
fort-attio.c:(.text+0x11c): undefined reference to `nc_put_att_text'
......

源代码上的某些东西(dwarf?)似乎与我的系统不兼容。

usr/bin/ld: Dwarf Error: found dwarf version '4',这个阅读器只处理版本 2 的信息。

顺便说一下,我使用的操作系统是CentOS 5.0,我已经安装了netCDF-4.1.3(C&Fortran二进制代码结合的最后一个版本)和GCC-4.9.2

我可以在 megan_bio_emissMakefile 中进行更改以成功编译吗?

任何建议将不胜感激!

-------------------------------- 2016-9-10 添加 --------- ----------------------

我将-gdwarf-2 开关添加到Makefile 的特定行。

编译还是出错。

【问题讨论】:

【参考方案1】:

问题是 gcc 4.9 默认生成 dwarf-4,但您还没有更新到也可以理解 dwarf-4 的最新版本的链接器。

一个简单的解决方法是 -gdwarf-2 编译器选项。

【讨论】:

感谢您的回复!我尝试添加 swith -gdwarf-2 进行编译,但问题似乎没有解决。如何更新到最新版本的链接器? 你确定你已经重新编译了所有的对象吗?如果是这样,您也可以尝试将 -gdwarf-2 添加到链接行,但我不确定是否有必要。 抱歉稍后回复您。链接线在哪里?我对编译不是很熟悉。现在添加了-gdwarf2,它会编译每个.f90 文件,例如gfortran -g -ffree-line-length-none -gdwarf-2 -c -I/disk2/hyf/ lib/netcdf/include misc_definitions_module.f90.

以上是关于编译与 netcdf 关联的程序时 Dwarf 版本出错的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 生成的 DWARF 文件中的相对路径

sjlj vs dwarf vs seh 有啥区别?

netcdf源码在windows上的编译

如何在 Linux 内核模块中找到合适的 DWARF 符号作为地址?

在 Visual Studio 上的 C++ 项目中将 NetCDF(通过 vcpkg 安装)与 CMake 一起使用时未解析的外部符号

使用 NetCDF 的 R CMD SHLIB Fortran 90 文件