首先给出版本信息:
Julia:1.5.0
JuliaFEM: 0.5.1
Calculus: 0.5.1
在上述版本中可以正常add JuliaFEM
,但using JuliaFEM
就报错,先后出现两类错误。
第一类是
ERROR: LoadError: LoadError: Evaluation into the closed module Calculus breaks incremental compilation because the side effects will not be permanent. This is likely due to some other module mutating Calculus with eval during precompilation - don't do this.
这是Calculus
包里的eval
导致的,与Julia对module的编译原理有关。可以参阅这个issue页面。
打开~/.julia/packages/Calculus/mbqhh/src/symbolic.jl
,找到96行的代码
return (@static (VERSION < v"0.7.0-DEV.5149") ? eval : Core.eval)(@__MODULE__, ex)
替换为
return getfield(Base,ex.args[1])(ex.args[2:end]...)
第二类问题是
TypeError: in AbstractElement, in M, expected M<:FEMBase.AbstractFieldSet, got Type{FEMBasis.Seg2}
解决办法参考这个issue。首先找到出错的源代码位置,就在报错信息下的第一行,例如:
ERROR: LoadError: LoadError: TypeError: in AbstractElement, in M, expected M<:FEMBase.AbstractFieldSet, got Type{FEMBasis.Seg2}
Stacktrace:
[1] top-level scope at /home/trump/.julia/packages/FEMBeam/oEQQ6/src/beam3d.jl:15
按图索骥打开beam3d.jl,搜索Element{
(注意左花括号),除了Element{E}
之外,逐个替换为Element{<:FEMBase.AbstractFieldSet,
(注意逗号)。要注意的是,不要修改Element{E}
。保存,退出编辑。
再次尝试using JuliaFEM
,又出现相同的错误,但文件位置变了。按照上述办法逐个文件修改,直到不再报错。全部修改完后,using JuliaFEM
会输出一堆warning而不会报错,可以正常使用了。