OpenCasCade开发环境搭建 - 小众知识

OpenCasCade开发环境搭建

2013年01月27日 14:18:05 苏内容
  标签: OCC
阅读:7328

我的安装环境:

Windows7 旗舰版 SP1 x64;

Visual Studio 2010 SP1;

OpenCasCade-6.7.1 源码包;

如图为OpenCasCade官方文档上列出的Requirements:

Requirements

 

注意 Visual Studio 的版本要求。

OpenCasCade下载和安装

请自行到OpenCasCade官网进行下载,我下载的是下面的那个源码包。(上面的是针对VS2008 预编译好的,可以直接使用,库文件什么的都已经生成好了。使用方法参见后文。)

QQ截图20141009155921

解压后的OpenCasCade目录如图:2014-10-09_155518

 

接下来,下载适合自己编译器版本的第三方库(官方下载地址):

QQ截图20141009160255Note:这里的第三方库都是根据相应的平台编译生成好的,直接下载解压即可使用。如果不从这里下,而是从各个第三方库的官网下载,则需要自己根据平台自行编译对应的版本,下面也会告诉你怎么自己编译生成。

OpenCasCade编译、示例运行及使用

1. 确保你下载安装了所有需要的第三方库(对照上图)

OCCT使用两种类型的第三方库:

强依赖(必须的):

  • Tcl/Tk 8.5 – 8.6;
  • FreeType 2.4.10 – 2.4.11.

弱依赖(可选的):

  • TBB 3.x – 4.x;
  • gl2ps 1.3.5 – 1.3.8;
  • FreeImage 3.14.1 -3.15.4.

安装强依赖的第三方库:

Tcl/Tk

新建一个occ3rdparty文件夹,专门用来放置第三方库。把下载的Tcl/Tk 解压到文件夹中。Tcl/Tk是之后运行 DRAW 测试程序所必须的。

FreeType

FreeType是3D窗口中,文字表现所必须的。解压下载的FreeType到occ3rdparty文件中即可。

如果你不是从上图适配过的第三方库链接下载的(是的跳过,比如你从其自身官网下载,则需要自己编译,方法很简单,打开工程目录freetype\builds\win32\vc20xx\freetype.sln中的项目工程,vc20xx 代表你的VS版本)。

选择生成配置:Debug 或 Release都可以。

生成项目,你会在目录freetype\obj\win32\vc20xx下找到生成的导入库文件(.lib)。(要注意导入库和静态链接库的区别,虽然它们的后缀都是.lib)

如果你想生成用于x64 平台的FreeType,则选择 Build – Configuration Manager,并通过复制x86平台上的配置来添加x64平台的项目配置。如图:

3rdparty_image001

同时为 x64项目配置 更新输出文件目录:

3rdparty_image003同样,你会在目录freetype\x64\vc20xx下得到 x64 的导入库文件(.lib)。

骚等,还没完,接着用下面几步,我们要来生成FreeType的动态链接库文件(.dll)。

打开菜单 Project-> Properties-> Configuration Properties-> General,把 Configuration Type 改为 Dynamic Library (.dll).

编辑头文件 freetype\include\freetype\config\ftoption.h:

在第255行,去掉 FT_EXPORT  宏定义的注释,如下:

 
 
 
 
 
 
C++
 
1
#define FT_EXPORT(x)   __declspec(dllexport) x

再次生成FreeType工程,最后你会在目录freetype \objs\release 或 \objs\debug 得到包含一个导入库(.lib)和动态链接库(.dll)。

如果你要生成x64版本的,则重复之前的方法。

安装弱依赖的第三方库

TBB

下载解压即可。

QQ截图20141009165720

gl2ps

下载解压即可。

若不是从上述适配过的版本链接下载的,而是自己从gl2ps的官方网站进行下载的,则需要自己编译。

很简单,

在Visual Studio中打开项目文件 gl2ps_bin\gl2ps.sln。

  • 选择生成的配置选项
    • Choose Release to build Release binaries.
    • Choose Debug to build Debug binaries.
  • 选择生成的平台
    • Choose Win32 to build for a 32 bit platform.
    • Choose x64 to build for a 64 bit platform.
  • 编译生成该工程
  • 编译生成 INSTALL 工程

FreeImage

下载解压即可。

若不是从上述适配过的版本链接下载的,而是自己从FreeImage的官方网站进行下载的,则需要自己编译。

略麻烦:

  1. 解压下载的FreeImage到occ3rdparty目录。

    根据如此规则来重命名文件夹: freeimage-platform-compiler-building mode,其各个代表的意思为

    • platform 代表你的是 win32 还是 win64;
    • compiler 代表的是 vc8 还是 vc9 还是 vc10 还是 vc11;
    • building mode 代表的是 opt (release版本) 还是 deb (debug版本)
  2. 用你的Visual Studio 打开项目文件 freeimage\FreeImage.*.sln*。

    如果你的VS版本高于2008,则应用转换。

  3. 选择生成配置。

    • Release
    • Debug

    注意:

    如果你想生成 FreeImage 的 debug 版本,你需要重新命名FreeImage和FreeImagePlus工程中的以下文件:

    Project -> Properties -> Configuration Properties -> Linker -> General -> Output File

     

     
     
     
     
     
     
    C++
     
    1
    2
    FreeImage*d*.dll  to FreeImage.dll
    FreeImagePlus*d*.dll to FreeImagePlus.dll

     

    Project -> Properties -> Configuration Properties -> Linker -> Debugging-> Generate Program Database File

     

     
     
     
     
     
     
    C++
     
    1
    2
    FreeImage*d*.pdb  to FreeImage.pdb
    FreeImagePlus*d*.pdb to FreeImagePlus.pdb

     

    Project -> Properties -> Configuration Properties -> Linker -> Advanced-Import Library

     

     
     
     
     
     
     
    C++
     
    1
    2
    FreeImage*d*.lib  to FreeImage.lib
    FreeImagePlus*d*.lib  to FreeImagePlus.lib

     

    Project -> Properties -> Configuration Properties -> Build Events -> Post -> Build Event -> Command Line

     

     
     
     
     
     
     
    C++
     
    1
    2
    3
    4
    FreeImage*d*.dll     to FreeImage.dll
    FreeImage*d*.lib     to FreeImage.lib
    FreeImagePlus*d*.dll to FreeImagePlus.dll
    FreeImagePlus*d*.lib to FreeImagePlus.lib

     

    此外, 重命名FreeImagePlus工程里的相关配置:

    Project -> Properties -> Configuration Properties -> Linker -> Input -> Additional Dependencies

     

     
     
     
     
     
     
    C++
     
    1
    from FreeImage*d*.lib to FreeImage.lib

     

  4. 选择生成平台
    • Win32
    • x64
  5. 开始生成

    最终你会在目录freeimage\Dist folder 得到库文件(FreeImage.dll and FreeImage.lib) 以及 在freeimage\Wrapper\FreeImagePlus\dist 得到(FreeImagePlus.dll and FreeImagePlus.lib).

OpenCL ICD Loader

下载解压即可。

这个不建议自己到OpenCL ICD Loader官网下载编译,所以不介绍怎么编译生成。

 

 2. 使用Visual Studio建立OCCT

  1. 编辑脚本文件 custom.bat 来 定义你的环境:
    • VCVER – version of Visual Studio (vc8, vc9, vc10, vc11 or vc12), and relevant VCVARS path
    • ARCH – architecture (32 or 64), affects only PATH variable for execution
    • HAVE_* – flags to enable or disable use of optional third-party products
    • CSF_OPT_* – paths to search for includes and binaries of all used third-party products
  2. 接着运行 msvc.bat 脚本文件开始运行 Visual Studio。

    注意:  MSVC 工程文件是放在目录 adm\msvc\vc[9-12] 里的。二进制文件在 win32 或 win64 文件夹中.

  3. 建立生成项目

修改后我的custom.bat文件(改成了VS2010),要改的很多,尤其是头文件、导入库、以及动态链接库的目录,要逐一修改为你现在的目录(细心的童鞋可能会发现,其实如果开始第三方库直接放在OpenCasCade的根目录,且每个名字都重命名为 freetype-2.5.3-%VCVER%-%ARCH% 的形式,%VCVER%和%ARCH%代表的值参见上面,则后期在custom.bat上就没必要修改那么多了。。o(╯□╰)o):

 
 
 
 
 
 
C++
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
 
set VCVER=vc10
set ARCH=32
set "VCVARS=%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"
set "PRODUCTS_PATH=%~dp0.."
 
rem Optional 3rd-parties switches
set HAVE_FREEIMAGE=true
set HAVE_GL2PS=true
set HAVE_TBB=true
set HAVE_OPENCL=true
set CHECK_QT4=true
set CHECK_JDK=true
 
rem Additional headers search paths
set "CSF_OPT_INC=D:\Program Files\opencascade-6.7.1\occ3rdparty\opencl-icd-1.2.11.0-32\include;D:\Program Files\opencascade-6.7.1\occ3rdparty\tcltk-86-32\include;D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\include;D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\include\freetype2;D:\Program Files\opencascade-6.7.1\occ3rdparty\freeimage-3.16.0-vc10-32\include;D:\Program Files\opencascade-6.7.1\occ3rdparty\gl2ps-1.3.8-vc10-32\include;D:\Program Files\opencascade-6.7.1\occ3rdparty\tbb43_20140724oss\include"
 
rem Additional libraries (32-bit) search paths
set "CSF_OPT_LIB32=D:\Program Files\opencascade-6.7.1\occ3rdparty\opencl-icd-1.2.11.0-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\tcltk-86-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\freeimage-3.16.0-vc10-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\gl2ps-1.3.8-vc10-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\tbb43_20140724oss\lib\ia32\%VCVER%"
 
rem Additional libraries (64-bit) search paths
set "CSF_OPT_LIB64=D:\Program Files\opencascade-6.7.1\occ3rdparty\opencl-icd-1.2.11.0-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\tcltk-86-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\freeimage-3.16.0-vc10-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\gl2ps-1.3.8-vc10-32\lib;D:\Program Files\opencascade-6.7.1\occ3rdparty\tbb43_20140724oss\lib\intel64\%VCVER%"
 
rem Additional (32-bit) search paths
set "CSF_OPT_BIN32=D:\Program Files\opencascade-6.7.1\occ3rdparty\opencl-icd-1.2.11.0-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\tcltk-86-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\freeimage-3.16.0-vc10-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\gl2ps-1.3.8-vc10-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\tbb43_20140724oss\bin\ia32\%VCVER%"
 
rem Additional (64-bit) search paths
set "CSF_OPT_BIN64=D:\Program Files\opencascade-6.7.1\occ3rdparty\opencl-icd-1.2.11.0-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\tcltk-86-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\freeimage-3.16.0-vc10-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\gl2ps-1.3.8-vc10-32\bin;D:\Program Files\opencascade-6.7.1\occ3rdparty\tbb43_20140724oss\bin\intel64\%VCVER%"

选择 项目->批生成->全选->生成 (网上很多说按照什么顺序来生成,告诉你,just let it go)如图:

QQ截图20141009213524

接下来是漫长的等待。结束后你会发现OpenCasCade的根目录下多出了两个文件夹 win32 和 win64,什么意思我想大家都明白。里面及包含了我设置的VS2010开发环境下所生成的Debug(文件夹名后都会加个d)和Release两个版本的导入库和动态链接库。码代码,调试代码,肯定要用带d的了咯!

QQ截图20141009215143我编译的时候遇到了如下错误:

 
 
 
 
 
 
C++
 
1
2
3
4
5
正在创建库 ..\..\..\win32\vc10\libd\TKService.lib 和对象 ..\..\..\win32\vc10\libd\TKService.exp
Font_FontMgr.obj : error LNK2019: 无法解析的外部符号 __imp__RegCloseKey@4,该符号在函数 "private: void __thiscall Font_FontMgr::InitFontDataBase(void)" (?InitFontDataBase@Font_FontMgr@@AAEXXZ) 中被引用
Font_FontMgr.obj : error LNK2019: 无法解析的外部符号 __imp__RegEnumValueA@32,该符号在函数 "private: void __thiscall Font_FontMgr::InitFontDataBase(void)" (?InitFontDataBase@Font_FontMgr@@AAEXXZ) 中被引用
Font_FontMgr.obj : error LNK2019: 无法解析的外部符号 __imp__RegOpenKeyExA@20,该符号在函数 "private: void __thiscall Font_FontMgr::InitFontDataBase(void)" (?InitFontDataBase@Font_FontMgr@@AAEXXZ) 中被引用
.\..\..\..\win32\vc10\bind\TKService.dll : fatal error LNK1120: 3 个无法解析的外部命令

谷歌了下,在 链接器 -> 输入 -> 附加依赖项 中添加 Advapi32.lib 即可。

也遇到了找不到“ft2build.h”的问题,尼玛!我明明在msvc.bat上加了相应的目录啊!也是醉了!

解决方法就是在 C/C++ -> 常规 -> 附加包含目录 添加目录”D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\include\freetype2″

具体方法如下:

设置的时候你可能会发现如图所示情况(工具-选项-VC++目录):

4

 

问谷歌,给的解决方法是,在属性管理器窗口,随便选择一个工程,点开选择Debug | Win32 – Microsoft.Cpp.Win32.user(这只是Debug | Win32版的配置更改,所有版本都要加上),

5

双击打开如图所示窗口,便可以进行设置了!

6

最后运行draw.bat脚本文件,你就可以看到示例窗口了!

1

 

3. 自己项目使用OCCT:

添加 附加包含目录 为:

 
 
 
 
 
 
C++
 
1
"D:\Program Files\opencascade-6.7.1\inc";"D:\Program Files\opencascade-6.7.1\occ3rdparty\opencl-icd-1.2.11.0-32\include";"D:\Program Files\opencascade-6.7.1\occ3rdparty\tcltk-86-32\include";"D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\include";"D:\Program Files\opencascade-6.7.1\occ3rdparty\freetype-2.5.3-vc10-32\include\freetype2";"D:\Program Files\opencascade-6.7.1\occ3rdparty\freeimage-3.16.0-vc10-32\include";"D:\Program Files\opencascade-6.7.1\occ3rdparty\gl2ps-1.3.8-vc10-32\include";"D:\Program Files\opencascade-6.7.1\occ3rdparty\tbb43_20140724oss\include"

选择链接器 – 输入 – 附加依赖项,点击下三角,编辑,复制以下库到其中:

 
 
 
 
 
 
C++
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
TKVrml.lib
TKStl.lib
TKBrep.lib
TKIGES.lib
TKShHealing.lib
TKStep.lib
TKXSBase.lib
TKShapeSchema.lib
FWOSPlugin.lib
PTKernel.lib
TKBool.lib
TKCAF.lib
TKCDF.lib
TKernel.lib
TKFeat.lib
TKFillet.lib
TKG2d.lib
TKG3d.lib
TKGeomAlgo.lib
TKGeomBase.lib
TKHLR.lib
TKMath.lib
TKOffset.lib
TKPCAF.lib
TKPrim.lib
TKPShape.lib
TKService.lib
TKTopAlgo.lib
TKMesh.lib
TKV3d.lib
TKOpenGl.lib
TKBO.lib

添加 链接器 -> 常规 -> 附加库目录 (我把所有的lib文件都复制到了下面这个目录):

 
 
 
 
 
 
C++
 
1
"D:\Program Files\opencascade-6.7.1\win32\vc10\libd"

到此,你的程序就可以使用OCCT了。

接着咱们运行下 x:\x\OpenCASCADE6.7.1\opencascade-6.7.1\samples\mfc\standard 目录下的 All-vc10.sln,随便运行一个,结果如图:

NOTE:运行前请把, ~\opencascade-6.7.1\samples\mfc\standard\win32\vc10\libd\mfcsample.dll 文件 复制到目录 ~\opencascade-6.7.1\samples\mfc\standard\win32\vc10\bind\

否则会报如下错:

 
 
 
 
 
 
C++
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!
 
Program: ...scade-6.7.1\samples\mfc\standard\win32\vc10\bind\Geometry.exe
File: d:\program files\opencascade-6.7.1\samples\mfc\standard\common\winmain.cpp
Line: 76
 
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
 
(Press Retry to debug the application)
---------------------------
中止(A)   重试(R)   忽略(I)  
---------------------------

 

8

 

总结

整个过程其实不难,比起CGAL的开发环境搭建要简单很多,重要的是胆大心细,遇到问题分析原因,然后解决它。有问题请留言。


2014/12/8

根据网友反映的各种找不到dll文件问题,现添加如下内容,也是博主疏漏了。抱歉!

我的做法是把所有的dll文件(包括第三方库的)都复制到一个文件夹下,然后把此目录添加到用户环境变量PATH里。

QQ截图20141208200433

当然,你也可以把所有的dll文件一股脑塞到system32或者syswow64里,但是不建议这么做。

 

转载请注明:FreeStyle ? OpenCasCade开发环境搭建

扩展阅读