Compile_Netgen_WITH_OpenCascade
title: Compile_Netgen_WITH_OpenCascade
date: 2016-04-23 21:14:42
tags:
结合OCCT编译Netgen
date: 2016-04-23 19:54:25
前言
目前大多数netgen编译的教程都是without OCCT.
环境:
windows 7
VS2010
Open Cascade6.5.1
Netgen5.0.0
编译版本:
debug x64
Netgen5.0.0下载
下载源文件:
第三方库文件:
注: 这里必须预先已经编译好OCCT6.5.1 本文默认读者已经编译好. 可直接调用库文件进行开发.
文件排放结构

编译前准备工作
修改windows目录下的postBuild_netgen.bat文件:
删除下面代码:ifdefined NETGENDIR (echo Environment variable NETGENDIR found:%NETGENDIR%set INSTALL_FOLDER=%NETGENDIR%\..)else(echo Environment variable NETGENDIR not found....usingdefault location!!!if/i "%W_WO_OCC%"=="OCC"(set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instOCC_%BUILD_ARCH%)else(set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instNoOCC_%BUILD_ARCH%))替换为set INSTALL_FOLDER=G:\netgen5.0在文件末尾添加REM ***Copy the 3rdLibrary files into the InstallFolder***set TCL_LIB_DIR=%INSTALL_FOLDER%\ext_libs\tcl\libset TCL_BIN_DIR=%PROJ_DIR%..\..\ext_libs\tcl\binset PTHREAD_LIB_DIR=%PROJ_DIR%..\..\ext_libs\pthread-w32\libecho Installing3rdLibrary files into%INSTALL_FOLDER%\bin....xcopy "%TCL_BIN_DIR%\*.dll""%INSTALL_FOLDER%\bin\" /i /d /yxcopy "%PTHREAD_LIB_DIR%\*.dll" "%INSTALL_FOLDER%\bin\" /i /d /yxcopy "%TCL_LIB_DIR%""%INSTALL_FOLDER%\lib\" /e /i /d /yif errorlevel 1 goto ThreerdLibraryFailedecho Installing 3rd Library Files: Completed OK!!:ThreerdLibraryFailedecho POSTBUILD Script for %TCL_LIB_DIR% FAILED.....
编译Netgen5.0.0
使用VS2010打开 E:\NetGen5.0\netgen-5.0.0\windows\netgen-5.0.sln
出现问题1

解决办法:
PI问题
PI没有定义, 这里我们使用改版后的M_PI
在 e:\NetGen\netgen-5.0.0\libsrc\occ\Partition_Loop2d.cxx 文件的开头加入以下宏定义:#ifndef PI#define PI M_PI#endif````### # value问题value:不是Extreme_ExtPS的成员在代码中我们可以看到作者为了兼顾OCCT多版本,所作出的注释所以,我们将V6.3行注释,删除v6.5行的注释接着编译............### 出现问题2**无法解析的外部符号Ng_occ_Init**1,在附加目录中包含(主目录)\libsrc\occ2,在e:\NetGen\netgen-5.0.0\ng\ngpkg.cpp文件中#include<occpkg.cpp>注意:该包含放在其他include之前.编译......问题:Ng_occ_Init调用不明确解决办法:**将ngp.cpp中的声明注释掉!**问题:以上包含后出现无法解析的外部符号:这是因为occpkg.cpp中调用了:staticVisualSceneOCCGeometry vsoccgeom;而以上类却找不到实现的cpp ,而E:\NetGen\netgen-5.0.0\libsrc\occ\vsocc.cpp就在occ文件夹下.解决办法:项目->添加现有项:>vsocc.hpp>vsocc.cpp接着编译....成功!## 编译nglib需要修改postBuild_nglib.bat文件:
删除下面代码:
if defined NETGENDIR (
echo Environment variable NETGENDIR found: %NETGENDIR%
set INSTALL_FOLDER=%NETGENDIR%\..
) else (
echo Environment variable NETGENDIR not found.... using default location!!!
if /i "%W_WO_OCC%" == "OCC" (
set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instOCC_%BUILD_ARCH%
) else (
set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instNoOCC_%BUILD_ARCH%
)
)
替换为
set INSTALL_FOLDER=G:\netgen5.0
“`
发现项目中竟然没有x64项目和debug(OCC) 所以只能自己在配置器中自己定义!
注意! 这样定义只是个名称而已, 加入OCC关键的体现地方在于宏定义,
即 只要是with OCC就必须要在预处理器中定义:
_OCC64
Standard_EXPORT=
OCCGEOMETRY
这是非常关键的, 否则就不能称之为 WITH OCC !!!!
编译非常顺利. 直接完成.
编译nglib
- nglib.dll
- nglib.lib
- 相关头文件
编译完成后,运行nglib文件夹下的ng_vol.cpp示例程序.如果一切运行正常, 打印出正确的信息. 那么证明一切顺利.
注:
备注1
本文中编译过程中默认 读者知道如何将OCCT的.h文件 .lib文件目录如何添加到netgen和nglib项目中
备注2
本文默认, 读者知道如何在编译完成之后 配置示例程序.
备注3
如果编译一切都顺利.只是会出现postBuild之类的FAILED错误. 这是因为post_Build.bat文件中要求的文件拷贝没有正确. 如果你真的搞不懂, 那你就自己手动拷贝即可.不用非得让程序自动拷贝. (其实仔细研究post_Build.bat文件,就知道也就那么回事了.)
参考学习
http://blog.csdn.net/zhouschina/article/details/9050373
http://blog.csdn.net/pizibing880909/article/details/21710767
Compile_Netgen_WITH_OpenCascade的更多相关文章
随机推荐
- Android 开发 框架系列 OkHttp文件上传功能实现(含断点续传)
前言 此篇博客只是上传功能的记录demo,如果你还不太了解okhttp可以参考我的另一篇博客https://www.cnblogs.com/guanxinjing/p/9708575.html 代码部 ...
- CSIC_716_20191112【闭包函数和装饰器】
闭包函数 什么是闭包函数:闭包函数是函数嵌套.函数对象.名称空间和作用域的集合体. 闭包函数必须在函数内部定义,闭包函数可以引用外层函数的名字. # _*_ coding: gbk _*_ # @Au ...
- thjinkphp 变量调试
输出某个变量是开发过程中经常会用到的调试方法,除了使用php内置的var_dump和print_r之外,ThinkPHP框架内置了一个对浏览器友好的dump方法,用于输出变量的信息到浏览器查看. 大理 ...
- PHP如何实现百万级数据导出
公司目前有一个需求,需要对一个日增量在20万+数据量的数据表中的数据进行可自定义条件筛选的导出数据,该功能需要对多个部门进行开发使用,要保证功能可用的前提下,尽量优化体验. 首先介绍一下当前可利用的资 ...
- python的起源及基本语句
一.Python的起源 Python是吉多范罗苏姆于1989年的圣诞节期间在阿姆斯特丹进行编写的,于1991年编写完成,Python是一门解释型弱类型的编程语言. Python在多个领域中都有应用,比 ...
- ASP.NET MVC Controller激活系统详解1
一.引言 好久没有写博客了,前一段时间学习了Controller激活的一篇很好的博文(链接),在此做个学习总结. 二.Controller 2.1 IController Controller类型直接 ...
- Hibernate之OID
在关系数据库中,主键用来识别记录,并保证每天记录的唯一性.在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两变量引用的对象是否相等.Hibernate为了解决两者之间的不同,使 ...
- MDK,关于 STM32F4 配置失败, GPIO, USART 写入值没反应
需要先将RCC->AHB1ENR寄存器的对应时钟打开! 下面做个测试: 配置GPIO实验 没有打开时钟使能,配置无反应: 打开时钟使能后,可以成功写入数据: 配置USART实验 RCC 未开启时 ...
- LightOJ-1234-Harmonic Number-调和级数+欧拉常数 / 直接打表
In mathematics, the nth harmonic number is the sum of the reciprocals of the first n natural numbers ...
- Spring AspectJ 切入点语法详解(7)
1.Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指 ...