在模块中找不到 (1) 中引用的非法预处理器指令和符号

Posted

技术标签:

【中文标题】在模块中找不到 (1) 中引用的非法预处理器指令和符号【英文标题】:Illegal preprocessor directive and Symbol referenced at (1) not found in module 【发布时间】:2018-04-26 06:53:50 【问题描述】:

我正在尝试使用其他一些软件包编译 Quantum ESPRESSO 代码。在使用 Makefile 并稍微编译标志之后,我“获得”了如下错误。有没有办法解决这个问题?我是否缺少任何标志以避免错误?还是来自代码本身?

$ mpif90 -fdollar-ok -ffree-line-length-none -O3 -fopenmp -fPIC -I ../../../qe/6.0-mpi/Modules -I ../src -I ../src ../../../qe/6.0-mpi/PW/src/libpw.a ../../../qe/6.0-mpi/Modules/libqemod.a ../../../qe/6.0-mpi/FFTXlib/libqefft.a ../../../qe/6.0-mpi/LAXlib/libqela.a -Wall -c qevars.f90 
Warning: qevars.f90:30: Illegal preprocessor directive
Warning: qevars.f90:32: Illegal preprocessor directive
Warning: qevars.f90:34: Illegal preprocessor directive
Warning: qevars.f90:56: Illegal preprocessor directive
Warning: qevars.f90:58: Illegal preprocessor directive
Warning: qevars.f90:60: Illegal preprocessor directive
Warning: qevars.f90:68: Illegal preprocessor directive
Warning: qevars.f90:70: Illegal preprocessor directive
Warning: qevars.f90:72: Illegal preprocessor directive
Warning: qevars.f90:74: Illegal preprocessor directive
Warning: qevars.f90:75: Illegal preprocessor directive
Warning: qevars.f90:77: Illegal preprocessor directive
qevars.f90:33:43:

     use io_files,   ONLY : nd_nmbr, prefix, outdir, tmp_dir, nwordwfc, iunwfc
                                           1
Error: Symbol ‘outdir’ referenced at (1) not found in module ‘io_files’
qevars.f90:73:43:

     use wvfct,      ONLY : npw, npwx, nbnd, igk, g2kin, wg, et, ecutwfc
                                           1
Error: Symbol ‘igk’ referenced at (1) not found in module ‘wvfct’
qevars.f90:73:63:

     use wvfct,      ONLY : npw, npwx, nbnd, igk, g2kin, wg, et, ecutwfc
                                                               1
Error: Symbol ‘ecutwfc’ referenced at (1) not found in module ‘wvfct’
qevars.f90:71:43:

     use wvfct,      ONLY : npw, npwx, nbnd, igk, g2kin, wg, et
                                           1
Error: Symbol ‘igk’ referenced at (1) not found in module ‘wvfct’

【问题讨论】:

对于所有 Fortran 问题,请使用标签 fortran。更多的人会看到你的问题。标签非常很重要。 我们缺少您的代码。代码是必要的。见minimal reproducible example 和How to Ask。 看起来你需要-cpp 标志。这只是一个猜测,因为我看不到代码。 @VladimirF 非常感谢您的回答。 -cpp 真的是我需要的标志! 【参考方案1】:

错误消息和警告,如

Warning: qevars.f90:30: Illegal preprocessor directive

通常由包含预处理器指令但不被预处理器预处理的 Fortran 代码处理。在 gfortran 中使用 -cpp 启用预处理器或使用带有大写 F 的文件扩展名(.F.F90)。

缺乏预处理可能会导致报告许多以下错误。

【讨论】:

嗨,我在安装 enumlib github.com/msg-byu/enumlib> 时遇到了类似的问题,但是,在我的 macbook 中添加 -cpp 标志不起作用。是否有另一种方法来修复错误“在模块中找不到 (1) 引用的符号 'co_ca'”。 @BinhThien 这是一个完全不同的问题。请打开一个单独的问题并显示您的代码和错误消息。 我在这里开了一个新问题:***.com/questions/70450109/…

以上是关于在模块中找不到 (1) 中引用的非法预处理器指令和符号的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot JPA 错误:无法处理托管/反向引用“defaultReference”:从类型中找不到反向引用属性

在类/表达式的非法开始中找不到主要方法

在架构 + 链接器命令中找不到符号失败,退出代码为 1

线程“主”org.jboss.modules.ModuleLoadError 中的异常:模块系统:在本地模块加载器@6267c3bb 中找不到主

在 laravel 7 路由中找不到句柄模块

Linux下系统命令提示Illegal instruction