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下载

下载源文件:

Netgen5.0.0 x64.exe

第三方库文件:

pthreads-w32_x64.zip

TclTkTixTogl_x64.zip

Opencascade

注: 这里必须预先已经编译好OCCT6.5.1 本文默认读者已经编译好. 可直接调用库文件进行开发.

文件排放结构

编译前准备工作

修改windows目录下的postBuild_netgen.bat文件:

  1. 删除下面代码:
  2. ifdefined NETGENDIR (
  3. echo Environment variable NETGENDIR found:%NETGENDIR%
  4. set INSTALL_FOLDER=%NETGENDIR%\..
  5. )else(
  6. echo Environment variable NETGENDIR not found....usingdefault location!!!
  7. if/i "%W_WO_OCC%"=="OCC"(
  8. set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instOCC_%BUILD_ARCH%
  9. )else(
  10. set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instNoOCC_%BUILD_ARCH%
  11. )
  12. )
  13. 替换为
  14. set INSTALL_FOLDER=G:\netgen5.0
  15. 在文件末尾添加
  16. REM ***Copy the 3rdLibrary files into the InstallFolder***
  17. set TCL_LIB_DIR=%INSTALL_FOLDER%\ext_libs\tcl\lib
  18. set TCL_BIN_DIR=%PROJ_DIR%..\..\ext_libs\tcl\bin
  19. set PTHREAD_LIB_DIR=%PROJ_DIR%..\..\ext_libs\pthread-w32\lib
  20. echo Installing3rdLibrary files into%INSTALL_FOLDER%\bin....
  21. xcopy "%TCL_BIN_DIR%\*.dll""%INSTALL_FOLDER%\bin\" /i /d /y
  22. xcopy "%PTHREAD_LIB_DIR%\*.dll" "%INSTALL_FOLDER%\bin\" /i /d /y
  23. xcopy "%TCL_LIB_DIR%""%INSTALL_FOLDER%\lib\" /e /i /d /y
  24. if errorlevel 1 goto ThreerdLibraryFailed
  25. echo Installing 3rd Library Files: Completed OK!!
  26. :ThreerdLibraryFailed
  27. echo 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

  1. 在 e:\NetGen\netgen-5.0.0\libsrc\occ\Partition_Loop2d.cxx 文件的开头加入以下宏定义:
  2. #ifndef PI
  3. #define PI M_PI
  4. #endif
  5. ````
  6. ### # value问题
  7. value:不是Extreme_ExtPS的成员
  8. ![问题2](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen16.png)
  9. 在代码中我们可以看到作者为了兼顾OCCT多版本,所作出的注释
  10. 所以,我们将V6.3行注释,删除v6.5行的注释
  11. 接着编译............
  12. ### 出现问题2
  13. **无法解析的外部符号Ng_occ_Init**
  14. ![Nginit问题](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen17.png)
  15. 1,在附加目录中包含(主目录)\libsrc\occ
  16. 2,在e:\NetGen\netgen-5.0.0\ng\ngpkg.cpp文件中
  17. #include<occpkg.cpp>
  18. 注意:该包含放在其他include之前.
  19. 编译......
  20. 问题:
  21. Ng_occ_Init调用不明确
  22. ![结合OCCT编译Netgen9](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen19.png)
  23. 解决办法:
  24. **将ngp.cpp中的声明注释掉!**
  25. ![结合OCCT编译Netgen10](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen110.png)
  26. 问题:
  27. 以上包含后出现无法解析的外部符号:
  28. ![结合OCCT编译Netgen8](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen18.png)
  29. 这是因为occpkg.cpp中调用了:
  30. staticVisualSceneOCCGeometry vsoccgeom;
  31. 而以上类却找不到实现的cpp ,而E:\NetGen\netgen-5.0.0\libsrc\occ\vsocc.cpp就在occ文件夹下.
  32. 解决办法:
  33. 项目->添加现有项:
  34. >vsocc.hpp
  35. >vsocc.cpp
  36. 接着编译....
  37. 成功!
  38. ## 编译nglib
  39. 需要修改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过后,才能将其整合到自己的程序当中去. 上面的netgen只是第一步, 这一步才是生成我们需要的关键文件:
 
  • nglib.dll
  • nglib.lib
  • 相关头文件
 
 
编译nglib就很简单了. 在windows文件夹中打开nglib.sln工程文件 .  将版本设为release(OCC)即可. 
编译过程中会出现pthreadVC_64.dll文件找不到的情况,将链接器中pthreadVC_64.dll改为pthreadVC_x64.dll.
还有就是可能找不到OCC的lib相关文件. (当你的OCC不是安装形式存在在电脑里的时候.).然后手动包含OCC的lib文件夹即可. 

编译完成后,运行nglib文件夹下的ng_vol.cpp示例程序.如果一切运行正常, 打印出正确的信息. 那么证明一切顺利.

注:

备注1

本文中编译过程中默认 读者知道如何将OCCT的.h文件 .lib文件目录如何添加到netgen和nglib项目中

备注2

本文默认, 读者知道如何在编译完成之后 配置示例程序.

备注3

如果编译一切都顺利.只是会出现postBuild之类的FAILED错误. 这是因为post_Build.bat文件中要求的文件拷贝没有正确. 如果你真的搞不懂, 那你就自己手动拷贝即可.不用非得让程序自动拷贝. (其实仔细研究post_Build.bat文件,就知道也就那么回事了.)

参考学习

NetGen用户手册

http://blog.csdn.net/zhouschina/article/details/9050373

http://blog.csdn.net/pizibing880909/article/details/21710767

最新文章

  1. 移动端meta
  2. SRM 657 DIV2
  3. BT5升级MSF至Git更新的方法
  4. 20169210《Linux内核原理与分析》第五周作业
  5. tomcat开始批量——setclasspath.bat
  6. 安全系列之二:OAuth2.0 开放授权协议
  7. 栈的实现Java
  8. Azure AI 服务之文本翻译
  9. java异常基础整理
  10. CyclicBarrier简介
  11. React Native &amp; app demos
  12. UOJ#201. 【CTSC2016】单调上升路径 构造
  13. Ubuntu14.04打开cheese却黑屏的问题
  14. jetbrains全系列可用例:IDEA、WebStorm、phpstorm、clion等激活到2099
  15. VSTO:使用C#开发Excel、Word【11】
  16. OpenAI 开源机器人模拟 Python 库,并行模拟处理速度提升400%
  17. JDBC 接口学习
  18. 通信协议演进与JCE协议详解
  19. centos6 安装 docker 问题
  20. 【Qt】QLabel之动态阴影边框

热门文章

  1. BeanPostProcessor原理学习
  2. cocos2D-X 常用功能封装
  3. xml 单例类
  4. 使用java Graphics 绘图工具生成顺丰快递电子面单
  5. nginx的配置:目的是使用nginx反向代理后,应用程序获取用户真实ip
  6. Unable to find explicit activity class报错问题解决方法
  7. /encrypt和/decrypt端点来进行加密和解密的功能
  8. ArrayList 和linkedList 插入比较
  9. ssm 框架整合 代码初步 maven配置
  10. 7_1.springboot2.x启动配置原理_1.创建SpringApplication对象