编译与 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_emiss 的 Makefile 中进行更改以成功编译吗?
任何建议将不胜感激!
-------------------------------- 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 版本出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 内核模块中找到合适的 DWARF 符号作为地址?
在 Visual Studio 上的 C++ 项目中将 NetCDF(通过 vcpkg 安装)与 CMake 一起使用时未解析的外部符号