OpenFOAM编译报错问题解决
问题一
OpenFOAM 3.0.0进行编译时,出现错误 error: ‘isnan’ was not declared in this scope
需要在src/conversion/ensight/part/ensightPart.H
文件代码段
// Static data memebers
static const List<word> elemTypes_;
后加入如下代码:
// wrapper for isnan, namely C99 or C++11
inline bool isnan(const scalar value) const
{
#ifndef isnan
return std::isnan(value);
#else
return ::isnan(value);
#endif
}
再继续进行编译。
问题二:
出现错误
'yyFlexLexer::yywrap()' collect2:error:ld returned 1 exit status OpenFOAM
在OpenFOAM文件家下打开终端cd ~/OpenFOAM/OpenFOAM-3.0.0
输入
find src applications -name "*.L" -type f | xargs sed -i -e 's=\(YY\_FLEX\_SUBMINOR\_VERSION\)=YY_FLEX_MINOR_VERSION < 6 \&\& \1='
OpenFOAM自定义编译注意细节
使用自定义库文件
.
├── Allwclean
├── Allwmake
├── fluxSchemes
│ ├── lnInclude
│ ├── Make
└── myRiemannSolverFoam
├── compressibleCFLNO.H
├── createFields.H
├── Make
└── myRiemannSolverFoam.C
假设其中的自定义文件fluxSchemes已经编译成动态库,并在目录/home/lw/OpenFOAM/<USER_NAME>-v1912/platforms/linux64GccDPInt32Debug/lib/libfluxSchemes.so
在OpenFOAM中,files用来指定OpenFOAM顺序进行编译的文件名称以及路径,options用来指定OpenFOAM需要调用的外挂库的路径以及名称。如果需要使用用户自定义文件,需要对files和Options做以下处理
对files文件:
myRiemannSolverFoam.C
EXE = $(FOAM_USER_APPBIN)/myRiemannSolverFoam
修改为FOAM_USER_APPBIN
的目的为避免和OpenFOMA官方执行文件所在目录FOAM_APPBIN
发生冲突。
options文件如果需要使用用户自定义的库(fluxSchemes),那么对EXE_INC
中关于该库需要做如下修改
EXE_INC = \
-I../fluxSchemes/lnInclude
对于EXE_LIBS
部分关于该库的修改如下
EXE_LIBS = \
-L$(FOAM_USER_LIBBIN) -lfluxSchemes
$(FOAM_USER_LIBBIN):路径为
home/lw/OpenFOAM/<USER_NAME>-v1912/platforms/linux64GccDPInt32Debug/lib
$(FOAM_USER_APPBIN):路径为home/lw/OpenFOAM/<USER_NAME>-v1912/platforms/linux64GccDPInt32Debug/bin