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模式。

posted @ 2023-01-03 23:40  流光Light  阅读(3263)  评论(0)    收藏  举报