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\lib
set TCL_BIN_DIR=%PROJ_DIR%..\..\ext_libs\tcl\bin
set PTHREAD_LIB_DIR=%PROJ_DIR%..\..\ext_libs\pthread-w32\lib
echo Installing3rdLibrary files into%INSTALL_FOLDER%\bin....
xcopy "%TCL_BIN_DIR%\*.dll""%INSTALL_FOLDER%\bin\" /i /d /y
xcopy "%PTHREAD_LIB_DIR%\*.dll" "%INSTALL_FOLDER%\bin\" /i /d /y
xcopy "%TCL_LIB_DIR%""%INSTALL_FOLDER%\lib\" /e /i /d /y
if errorlevel 1 goto ThreerdLibraryFailed
echo Installing 3rd Library Files: Completed OK!!
:ThreerdLibraryFailed
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
在 e:\NetGen\netgen-5.0.0\libsrc\occ\Partition_Loop2d.cxx 文件的开头加入以下宏定义:
#ifndef PI
#define PI M_PI
#endif
````
### # value问题
value:不是Extreme_ExtPS的成员
![问题2](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen16.png)
在代码中我们可以看到作者为了兼顾OCCT多版本,所作出的注释
所以,我们将V6.3行注释,删除v6.5行的注释
接着编译............
### 出现问题2
**无法解析的外部符号Ng_occ_Init**
![Nginit问题](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen17.png)
1,在附加目录中包含(主目录)\libsrc\occ
2,在e:\NetGen\netgen-5.0.0\ng\ngpkg.cpp文件中
#include<occpkg.cpp>
注意:该包含放在其他include之前.
编译......
问题:
Ng_occ_Init调用不明确
![结合OCCT编译Netgen9](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen19.png)
解决办法:
**将ngp.cpp中的声明注释掉!**
![结合OCCT编译Netgen10](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen110.png)
问题:
以上包含后出现无法解析的外部符号:
![结合OCCT编译Netgen8](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen18.png)
这是因为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的更多相关文章
随机推荐
- 深度探索C++对象模型之第二章:构造函数语意学之Copy constructor的构造操作
C++ Standard将copy constructor分为trivial 和nontrivial两种:只有nontrivial的实例才会被合成于程序之中.决定一个copy constructor是 ...
- PHP算法之两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- jquery无缝向上滚动实现代
<!DOCTYPE html><html><head><style type="text/css">.renav{width:200 ...
- override和overload区别
方法重载(overload)实现的是编译时的多态性(也称为前绑定) 方法重写(override)实现的是运行时的多态性(也称为后绑定)
- C++: string copy-on-write
https://blog.csdn.net/haoel/article/details/24058 https://www.cnblogs.com/promise6522/archive/2012/0 ...
- Delphi 第一课
Delphi 是面向对象的 可视化的集成开发环境 对象包括属性 方法 事件. 用户事件 对象响应事件 不同的对象响应事件不一样
- 廖雪峰Java16函数式编程-1Lambda表达式-3方法引用
Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法 ...
- jquery学习笔记(三):事件和应用
内容来自[汇智网]jquery学习课程 3.1 页面加载事件 在jQuery中页面加载事件是ready().ready()事件类似于就JavaScript中的onLoad()事件,但前者只要页面的DO ...
- VS2010-MFC(常用控件:树形控件Tree Control 下)
转自:http://www.jizhuomi.com/software/203.html 前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件 ...
- a标签 href触发及传值
var d=document.getElementById("exportA");alert(d.href);d.href="${ctx}/templet/tEdasTe ...