编译Gmsh,生成dll和lib文件,在自建程序中使用Gmsh函数
本文参考了CAD大神潇湘散人的Gmsh编译博客:使用VS2015编译gmsh4.8 with opencascade7.4,并用gmsh.lib创建简单工程测试网格_XXM的博客-CSDN博客在编译过程中遇到了一些其他问题,并最终解决,成功编译。
1.下载Gmsh4.8.0:Index of /src
2.打开CMake,选择下载并解压的源码文件夹,要保存编译文件的文件夹。
点击Configure,选择VS2015和x64平台。
3. 等待Configure完成,选择所需的功能(以ENABLE_开头)。此处我用于与OCC对接,为OCC数据提供离散化功能,所以我参照了潇湘散人大神的配置,勾选了以下功能(直接搬的图):
因为要在自己的程序中调用Gmsh的函数,所以除了上述功能外,我还勾选了ENABLE_BUILD_LIB和ENABLE_BUILD_DYNAMIC用于生成lib和dll文件
在列表中搜索OCC,可以发现OCC_INC默认并没有找到所需的文件,此处设置为OCC的包含目录。
4.再次点击Configure,发现找不到OCC的lib文件。如果忽略这个问题直接Generate,最后生成gmsh的dll和lib文件后,在调用其方法时会出现错误:“Error:Gmsh requires OpenCASCADE to import shape”。所以需要配置OCC的lib文件的位置。
5.打开gmsh源码目录,打开CMakeLists.txt文件。
找到“find_library(OCC_LIB ...”这一行,修改“ENV CASROOT PATH_SUFFIXES”为自己系统中OCC lib文件夹目录路径
6.修改完之后,回到CMake,再次点击Configure,发现可以找到OCC了
7.点击Generate后,打开编译目录,打开gmsh项目。
点击重新生成解决方案。
发现成功2个,失败3个....往上翻一翻输出,发现“节数超过对象文件格式限制”的错误。
依次打开gmsh、lib、shared三个项目的属性页,找到配置属性》》C/C++》》命令行,添加/bigobj,点击确定
再次点击重新生成解决方案,发现成功重新生成了。
8.打开编译目录下的Debug目录,发现已经生成所需的dll与lib文件了。
9.复制文件并粘贴到自建项目的x64/Debug目录下。
10.打开自建项目,配置包含目录和库目录,包含目录设置为“gmsh源码目录\api”,库目录设置为“gmsh编译目录\Debug”。链接器》》输入》》附加依赖项,添加gmsh.lib。
11.设置测试函数,我还没去研究gmsh相关功能,所以此处copy了潇湘散人大神的代码。设置文件路径时,务必注意,路径必须为全英文。
#include <iostream>
#include <gmsh.h>
using namespace std;
using namespace gmsh;void GenerateMesh(const string filename) {double lc = 1;initialize();option::setNumber("General.Terminal", 1);option::setNumber("General.Verbosity", 99);option::setNumber("Mesh.Algorithm", 1);option::setNumber("Mesh.Algorithm3D", 1);option::setNumber("Mesh.MinimumCirclePoints", 15);option::setNumber("Mesh.MeshSizeMax", 5);std::vector<std::pair<int, int>> dimTags;model::occ::importShapes(filename, dimTags);model::occ::synchronize();model::mesh::setSize(dimTags, 1);model::mesh::generate(3);model::mesh::recombine();gmsh::write("D:\\CADModel\\GmshTest.stl");gmsh::finalize();}int main()
{//路径上不能有中文GenerateMesh("D:\\CADModel\\Box.step");system("pause");return 0;
}
12.运行程序,发现生成了stl文件,打开文件。。。效果有点不堪入目,等后期学习之后调参吧。
编译Gmsh,生成dll和lib文件,在自建程序中使用Gmsh函数相关推荐
- Qt 编译动态库只生成dll没有lib文件
背景描述: 库A开发最初是以静态库形式存在,随着时间推移项目功能逐渐增多,涉及库A的内容也增多.组内成员开发各有习惯,QtCreator和VS2015未作限制. 现象: VS2015编辑器下正常编译和 ...
- windos下编译ffmpeg生成dll、lib库(开启265)
编译环境Win 64位+MSYS2 一.安装MSYS2 1.下载msys.exe,https://www.msys2.org/ 2.安装msys 3.运行msys并执行命令pacman -Syu,一律 ...
- C++:通过多态实现接口并生成dll和lib文件的小例子
1.接口声明头文件 首先声明一个形状基类,然后是三个派生类三角形.长方形和圆形. 基类中只有一个函数,getArea()输出面积 三个派生类分别对getArea()重载,分别有各自的构造函数 派生类的 ...
- .dll与.lib文件的区别
文章转载于https://www.cnblogs.com/zkwarrior/p/10948174.html 共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由 ...
- c++中.dll与.lib文件的生成与使用的详解
c++中.dll与.lib文件的生成与使用的详解 --------------------------------------------------------------------------- ...
- 一分钟详解VS中快速生成dll和lib方法
视觉IMAX的第43篇文章 问题:如果我们在Visual Studio工程中,想要快速学习如何生成dll和lib,有什么小技巧呢? 方法:在VS工程中添加新项目,操作具体方法如图1.图2所示. 经过上 ...
- 怎么创建dllwenjian_如何创建和使用dll及lib文件
Abstract 如何在VC9环境下创建和使用dll及lib文件,但不用MFC. 一.创建dll 参见文章[zz]lib和dll文件的区别和联系.用方法一,在VC9下测试通过. 创建一个Dynamic ...
- 由dll导出lib文件
老生长谈的问题了,网上的教程也很多,这里以实际例子作个备份,并说明下注意点. 只有dll文件(my.test.dll)和头文件,没有lib文件,需要导出lib,静态编译进代码中,用VS自带的dumpb ...
- c 调用java的dll_Windows下java调用c的dll动态库--Dev_Cpp编译c生成dll
1.eclipse下建立一个HelloJNI.java内容如下: package JNI; public class HelloJNI { static { System.out.println(&q ...
最新文章
- 考研总结以及假期规划
- 基于图的异常检测(三):GraphRAD
- 深层学习:心智如何超越经验2.3 解释变化
- java 验证码 源码_java 验证码生成源码
- LINQ to Entities 不识别方法“System.String ToString() 的解决方法
- html5登录界面源代码_最新版本尤娜博客已更新源代码(速拿!!!)
- css 不规则边角_如何实现带有边角的CSS边框
- vue中既可以选择又可以手动输入的文本框类型_在PPT中制作一个胖乎乎的可爱圆环图...
- chosen jquery ajax搜索,基于chosen插件实现人员选择树搜索自动筛选功能
- Google 开源 iOS 应用测试工具:EarlGrey
- c3p0连接池配置说明
- 【Excel技巧必知必会】
- python攻击校园网_Python模拟校园网登录
- RTT Nano学习笔记 8 - 信号量
- 定时跑视图往另外一张表添加数据_聊一聊数据库中的锁
- 今日头条是怎么挣钱的
- 【mcuclub】模数转换ADC0832
- 服务器组装 华硕主板,华硕主板装机教程 华硕主板装机步骤
- 基于单片机的危险气体泄露报警器设计
- 揭秘!阿里巴巴基于Transformer的推荐系统