在模块中找不到 (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”:从类型中找不到反向引用属性
线程“主”org.jboss.modules.ModuleLoadError 中的异常:模块系统:在本地模块加载器@6267c3bb 中找不到主