Gmsh-从源代码编译Gmsh
Windows/Linux下的Gmsh源代码编译,使用CMake,Windows下使用GUI模式,Linux下使用终端模式。
Gmsh网站:gmsh.info
备注:由于不明原因,Gmsh/onelab已屏蔽国内IP。
Gmsh使用CMake配置生成选项的具体含义和定义请参考Gmsh官网。如果ccmake命令不可用,说明你没有安装GUI版本的CMake,例如,在Debian/Ubuntu系统中可以使用如下命令:
sudo apt-get install cmake-curses-gui
依赖项:
Gmsh的源代码包含的依赖项(以4.13.1为例,大部分存储在src/contrib文件夹中):
ALGLIB[contrib] ANN[contrib] Bamg Blossom DIntegration DomHex Eigen[contrib] Gmm[contrib] Hxt Kbipack MathEx[contrib] Mesh Metis[contrib] Netgen Nii2mesh NoSocklenT ONELAB ONELABMetamodel OptHom Parser Plugins Post QuadMeshingTools QuadTri Solver TetGen/BR TinyXML2[contrib] Untangle Voro++[contrib] WinslowUntangler tinyobjloader
其余库均需要自行编译,静态库或动态库自行选择,Release/Debug版本根据自己需求选择。几个编译比较麻烦的库如下:
FLTK:
Gmsh的图形化界面GUI依赖FLTK库实现,因此编译Gmsh前需要先编译FLTK,参考:
FLTK-从源代码编译FLTK - 流光Light - 博客园
如果编译FLTK时编译了libpng/libjpeg/libz,在CMake界面要求链接对应库的时候可以直接链接FLTK编译出的库,指定include文件夹时就直接指定FLTK的include文件夹。
JPEG:
下载源代码:Independent JPEG Group
Windows上编译时,参考文件夹内的INSTALL文件,windows的步骤在靠后位置。
首先打开Visual Studio工具集中的“Developer Command Prompt for VS 2022”(找到自己的对应VS版本),启动后输入powershell开启终端,使用命令cd到jpeg源代码文件夹。
使用命令生成sln文件:
nmake /f makefile.vs setup-v16
文件夹内就会生成两个sln文件,jpeg.sln和app.sln,如果只是使用libjpeg,那么不需要编译app,只打开jpeg.sln,选择自己要编译的平台,编译即可在Release文件夹下得到“jpeg.lib”。
JPEG的include文件夹需要自行创建,然后把源代码中所有.h头文件复制到其中即可。
HDF5/CGNS:
参考本博客文章:HDF5/CGNS-从源代码编译HDF5和CGNS - 流光Light - 博客园
OCCT:
从源代码编译OCCT可以参考本博客另外一篇文章。
注意:OCCT官网提供了Windows平台下编译好的二进制库(包括依赖的第三方库),可以直接下载使用。下载好后,保留inc、cmake文件夹以及{occ_dir}/win64/vc14中的bin和lib文件夹,复制到{occ_dir}文件夹中,否则Cmake可能缺少OCC的入口导致找不到OCC的文件,必须手动添加入口“OCC_INC”到Cmake中。例如:
OCC_INC = G:/Temp/Gmsh/lib/occt/inc
如果还是找不到对应的OCC库,只能直接修改CMakeList文件中的OCC部分,在”set(OCC_LIBS)“后,插入
set(OCC_TMP_LIB "G:/Temp/Gmsh/lib/opencascade-7.9.3-vc14-64/lib")
然后在查找库的语句中改为
find_library(OCC_LIB ${OCC} HINTS ENV CASROOT ${OCC_TMP_LIB} PATH_SUFFIXES
lib ${OCC_SYS_NAME}/vc8/lib ${OCC_SYS_NAME}/vc9/lib
${OCC_SYS_NAME}/vc10/lib ${OCC_SYS_NAME}/vc11/lib
${OCC_SYS_NAME}/vc12/lib ${OCC_SYS_NAME}/vc14/lib
${OCC_SYS_NAME}/gcc/lib ${OCC_SYS_NAME}/gcc/bin
${OCC_SYS_NAME}/lib)
直接指定库的位置可以解决。
Windows:
打开CMake-GUI,界面中Where is the source code/Where to build the binaries是源代码和构建二进制文件的路径,一般不要出现中文路径,尤其是在使用Gmsh时,不要采用中文路径。
特别注意:在Windows系统中编译时,不建议使用Visual Studio,因为Visual Studio对C++标准和openmp标准的支持十分滞后,而Gmsh则对标准支持十分激进,因此经常会出现语法不能识别的情况。
然后使用CMake配置Gmsh:
点击Configure,出现Gmsh的配置窗口,自行根据需求配置,如果启用模块则需要提前安装好对应的库,注意设置FLTK路径。
点击Generate,生成。
点击Open Project,打开Visual Studio的代码界面,生成->全部重新生成。所有项目生成成功后,在解决方案资源管理器中,选择INSTALL项目,右键选择生成,即在指定的CMAKE_INSTALL_PREFIX目录安装了Gmsh。
Visual Studio可能出现的问题包括:
在编译代码时,如果,你使用的是Visual Studio 2019版本,需要改openmp选项为 "-openmp:llvm" ,在Cmake配置页面的OpenMP_CXX_FLAGS和OpenMP_C_FLAGS把-openmp改成-openmp::llvm。
gmsh工程在“属性页-配置属性-链接器-系统-子系统”中,选择“控制台 (/SUBSYSTEM:CONSOLE)”。否则会出现如下错误:
“错误 LNK2019 无法解析的外部符号 main,函数 WinMain 中引用了该符号 gmsh F:\Temp\Gmsh\bin\gmsh\libfltk.lib(fl_call_main.obj) 1”
出现原因是gmsh是控制台程序,入口函数是main,而vs编译器默认windows程序,入口函数为WinMain。
Linux
1. 先安装OpenGL/alglib/cgns/hdf5/metis等依赖库
Fedora/CentOS/RHEL
sudo dnf install mesa-libGL-devel mesa-libGLU-develfreeglut-devel
Ubuntu/Debian
sudo apt install libgl1-mesa-dev libglu1-mesa-dev libglut-dev
上述命令并不完整,需要什么库再装什么。
备注:MED库头文件默认使用MPI,因此如果没有启用MPI的编译器的话会报错,如非必要可以不使用MED。
3. 从源代码编译Gmsh
mkdir build cd build ccmake .. make make install
CMake选项参考官网设置自定义即可,安装过程较为简单。
4. 安装测试
在CMAKE_INSTALL_PREFIX指定的安装路径下,会有<gmsh_dir>/bin/gmsh,输入“./gmsh -v”可以查看版本信息,直接执行可以进入GUI模式。

浙公网安备 33010602011771号