解决JuliaFEM的编译问题

首先给出版本信息:
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而不会报错,可以正常使用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值