编译报错总结

OpenFOAM 编译报错集锦

[ZYsprayFoam]$ wmake
make: *** No rule to make target '/home/x_yzhan/OpenFOAM/x_yzhan-2.4.x/src/thermophysicalModels/reactionThermo/lnInclude/psiReactionThermo.H', needed by 'sprayFoam.dep'. Stop.

solution:先执行 wclean 再进行 wmake


‘fvc’ has not been declared

solution:#include "fvc.H"


mkdir: cannot create directory ‘’: No such file or directory

这是因为 Make/files 里边输出路径的变量没有定义
比如:

LIB = $(FOAM_USER_LIBBIN_DEV)/libZYcombustionModels

solution:

export FOAM_USER_LIBBIN_DEV=/<path>/platforms/$WM_OPTIONS/lib

YEEqn.H:86:6: error:
passing ‘const volScalarField
{aka const GeometricField<double, fvPatchField, volMesh>}’
as ‘this’ argument discards qualifiers [-fpermissive]

T=G;

下边这个 T 是一个 const 引用,但我这里要给它赋值,所以报错。

solution:thermo 库有两个版本的 T(),使用非 const 那个即可,即在 solver 中定义 T 时,使用 volScalarField& T = thermo.T();


YEEqn.H:85:61: error:
cannot dynamic_cast ‘radiation’
(of type ‘class autoPtr<radiation::radiationModel>’)
to type ‘const class radiation::fvDOM&’
(source type is not polymorphic)

T=pow(dynamic_cast<const radiation::fvDOM &>(radiation).G()/4,0.25);

这里 radiation 是一个 autoPtr,而我要把它转换类型它的派生类。

solution:在 radiation 后边加一个 () 即可。autoPtr 加括号返回正常的指针。


undefined reference to 'Foam::functionName()'

库中函数只申明,没有定义,就会出现这个错误。


YEqn.H(30): error: no operator "*" matches these operands
In file included from reactingFoam.C(76):
operand types are:
Foam::tmp<Foam::fvMatrix<Foam::scalar>> * Foam::volScalarField
In file included from reactingFoam.C(76):

reaction->R(Yi)*efficiency_/TF_

这里的 R(Yi)tmp,fvMatrix,scalar,,,不能和 volScalarField(或者 scalar) 相乘。

solution:很简单,scalar 放前边就行了。。。即:efficiency_/TF_*reaction->R(Yi)。因为 scalar*fvMatrix 是允许的!!!


lnInclude/TDACCCMChemistryModel.C(709): error #308: member
"TDACChemistryModel<ReactionThermo, ThermoType>::timeSteps_
[with ReactionThermo=psiReactionThermo, ThermoType=gasHThermoPhysics]"
(declared at line 90 of "lnInclude/TDACChemistryModel.H") is inaccessible

this->timeSteps_++;

因为 timeSteps_ 是基类中的 private 变量,而私有变量只能基类自己内部使用。

solution:我是这样做的:在基类中,将这个变量从 private 改成 protected


WMspray/WMspray.C(299): error: dynamic_cast cannot cast away const
or other type qualifiers
basicSprayCloud& spray_ = dynamic_cast< basicSprayCloud&>(this->mesh()
.objectRegistry::lookupObject<sprayCloud>(Foam::sprayCloud::typeName));

代码改为以下即可,因为 lookupObject 得到的对象是 constlookupObjectRef 得到的才是可以修改的。

basicSprayCloud& spray_ = dynamic_cast< basicSprayCloud&>(this->mesh()
.objectRegistry::lookupObjectRef<sprayCloud>(Foam::sprayCloud::typeName));

~/OpenFOAM/OpenFOAM-2.3.x/src/finiteVolume/lnInclude/cyclicAMIFvPatch.H(39):
catastrophic error: cannot open source file "cyclicAMILduInterface.H"
#include "cyclicAMILduInterface.H"

这是因为旧版本的代码在 OF23x 中编译,解决方法是在 EXE_INC 中加入 -I$(LIB_SRC)/meshTools/lnInclude


Post.C(70): error: name followed by "::" must be a class or namespace name

这是因为没有 include 双冒号后边类的头文件。


findMax.C(212): error: ABC is not a template

需要 include ABC 的头文件,如果已经 include 了它的头文件,依然出现这个错误。那么检查 ABC 是否处于另一个命名空间里边。


findMax.C(235): error: the operand of a runtime dynamic_cast must have a
polymorphic class type dynamic_cast<const ABC& >(objectName).functionName()

可能是因为 objectNameautoPtr,需要在它后边加 ()


文章作者: Yan Zhang
文章链接: https://openfoam.top/compile/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 OpenFOAM 成长之路
您的肯定会给我更大动力~