在 XCode 7.0.1 中设置 VTK 6.1

2024-05-17

所以,我遇到了问题VTK(可视化工具包) http://www.vtk.org在 Mac OSX 上工作,特别是让它在XCode https://developer.apple.com/xcode/.

(我让它工作并将在下面发布这个问题的答案)

截至 2015 年 10 月的当前设置:

  • MacBook Pro 13 英寸(2015 年初)2.7 GHz i5、8GB 内存、Intel Iris 显卡 6100 (1.5GB)
  • OS X 埃尔卡皮坦
  • XCode 版本 7.0.1
  • VTK 版本 6.1

我希望这能帮助大家在 OSX 上配置和构建 VTK 的整个过程中遇到类似问题,并正确设置 XCode 以成功构建 VTK 项目。我也希望我不会忘记任何相关的事情。如果您有疑问或看到我犯的一些错误,请评论/回答。

我将一步步讲完从构建VTK到设置XCode的整个过程。我做了很多谷歌搜索并尝试了不同的东西。另外,我将尝试提供一些屏幕截图来帮助澄清问题,特别是对于像我这样刚接触 XCode 的人。据我记得并为它们添加了书签,我也会提供帮助我进行设置的资源。

下载、构建和安装

这将主要包括此 stackoverflow 线程中的步骤:安装支持 Cocoa 的 VTK 6.1 for OSX 10.8 https://stackoverflow.com/a/17329259/3038392

  1. 将 VTK 源代码从 Github 克隆到您选择的目录

    cd /用户/你/

    克隆https://github.com/Kitware/VTK.git https://github.com/Kitware/VTK.git

    cd VTK

    git checkout 标签/v6.1.0

  2. 建立一个构建目录

    mkdir VTKBuild

    cd VTK构建

    如果您不知道“构建”在 C/C++ 上下文中意味着什么,我建议您进一步阅读:构建 C/C++:到底发生了什么以及为什么需要这么长时间 http://voices.canonical.com/jussi.pakkanen/2012/10/01/building-cc-what-really-happens-and-why-does-it-take-so-long/

  3. 编辑 CMakeLists.txt

    在您下载的源目录(不是 /VTKBuild 目录)中,应该有一个文件“CMakeLists.txt”。在文本编辑器中打开它并搜索以下行:

    IF(APPLE)
     SET(VTK_OBJCXX_FLAGS_DEFAULT "-fobjc-gc")
     SET(VTK_REQUIRED_OBJCXX_FLAGS ${VTK_OBJCXX_FLAGS_DEFAULT} CACHE STRING "Extra flags for Objective-C++ compilation")
     MARK_AS_ADVANCED(VTK_REQUIRED_OBJCXX_FLAGS)
    ENDIF()
    

    删除或注释这些行。如果你一开始就没有找到它们,我认为你应该很好地开始,因为这可能会在新版本中得到修复。

    Source: [已解决]构建Qt 5.2.1 + VTK 6.1.0 + CMake 2.8.12.2 https://forum.qt.io/topic/40383/solved-build-qt-5-2-1-vtk-6-1-0-cmake-2-8-12-2/17

  4. 运行cmake脚本

    更改 /VTKBuild 目录。你现在在里面/用户/你/VTK/VTKBuild

    cmake ..

  5. 编辑CMakeCache.txt

    现在我们需要在生成的 CMakeCache.txt(在 /VTKBuild 目录中)中编辑几行。

    CMAKE_INSTALL_PREFIX. So make sure to use "/Users/you/" instead of "~":
    
    CMAKE_INSTALL_PREFIX:PATH=/Users/you/VTK/VTKBuild
    
    BUILD_SHARED_LIBS:BOOL=OFF
    
    CMAKE_BUILD_TYPE:STRING=Debug
    
    VTK_USE_SYSTEM_ZLIB:BOOL=ON
    
    CMAKE_OSX_ARCHITECTURES:STRING=i386;x86_64
    
    VTK_USE_COCOA:BOOL=ON
    
    VTK_USE_CARBON:BOOL=OFF
    
    CMAKE_OSX_SYSROOT:STRING=/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
    

    如果您按照本教程使用的 OS X 版本与我不同,则最后一个配置行的值可能会有所不同。在我的 CMakeCache.txt 中,它已经配置为正确的值。

    其他来源:第一部分:在 Mac 上构建 VTK 库 https://www.cs.auckland.ac.nz/~jli023/vtk/VtkprogammingonMac.htm

  6. 编译VTK工程

    这可能需要很长时间,您可以通过添加 -j ( +核心数)参数。这告诉您的编译器使用多个内核来编译文件,并且应该加快速度。 (您仍在 VTKBuild/ 目录中)。

    make

  7. 现在将头文件和库复制到包含目录

    进行安装

    这应该在 /VTKBuild 目录中创建 /lib 和 /include 目录。我们稍后会提到它们。

    这应该适用于建筑部分。 VTK 现已正确安装在您的系统上。

设置 XCode 项目

Source: 第三部分:手动创建 Xcode https://www.cs.auckland.ac.nz/~jli023/vtk/VtkprogammingonMac.htm

作为一般建议。如果配置了一些路径,请尽量使用绝对路径。特别是当我写“.../VTKBuild”之类的内容时,请将“...”替换为路径的正确部分。

  1. 创建一个新项目

    启动 XCode 并创建一个新项目(文件 -> 新项目)。选择 OS X -> 应用程序 -> 命令行工具。单击“下一步”,为其命名,然后选择 C++ 作为“语言”。选择您想要的位置并单击“创建”完成。

  2. 添加了必要的框架

    在左侧栏中选择您的项目,然后在中心导航至“构建阶段”。这应该给你这样的观点:

    现在展开“链接二进制文件与库”行。在一个新项目中,这不应该包含任何内容。我们现在需要链接 OpenGL、Cocoa 和 IOKit 框架。您可以通过点击底部的 + 按钮来完成此操作。这将开启与一些框架的对话。只需搜索上述框架并点击“添加”即可。

    我们还需要添加 zlib 库。再次点击 + 按钮,然后搜索“libz”。然后添加“lib.tbd”库。有多个版本可用,我只是添加了一个没有版本号的版本。其他人也可以工作。现在应该是这样的:

    现在我们需要添加VTK库文件。它们位于 /VTKBuild/lib 目录中。它们的名称应类似于“libvtkXXX.a”。您可以将它们拖放到窗口中,也可以像上一步中的框架一样,通过文件对话框选择它们:+按钮 ->“添加其他..” ->导航到 /VTKBuild/lib ->选择所有 *.使用 Shift+Click/Cmd+Click ->“打开”打开文件。它们可能需要一段时间才能显示在界面上。

  3. 配置源树

    打开 XCode 首选项 (CMD+,)。在顶部栏中导航至“位置”并选择“源树”。添加两行:

    “名称”-“显示名称”-“路径”

    vtk-debug-include vtk-debug-include ...VTKBuild/include/vtk-6.1

    vtk-debug-lib vtk-debug-lib ...VTKBuild/lib

  4. 添加搜索路径

    现在,我们需要告诉 XCode 在哪里查找其他头文件 (*.h),以便您能够在代码中“#include <...>”它们。

    为此,再次在左侧栏上选择您的项目。导航到“构建设置”并输入过滤器“搜索”。应该有一个名为“搜索路径”的行,其中包含子行“标题搜索路径”和“库搜索路径”。第一个需要设置为'...VTKBuild/include/vtk-6.1',后一项为'...VTKBuild/lib'.

  5. 定义宏

    如果你完成了上述所有事情。应构建并运行包含 VTK 头文件的项目。但为了正确运行,您可能需要在 *.cpp 文件之上、任何 #include 语句之前定义两个宏:

    #define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
    #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)
    

    没有这些我例如遇到 vtkWindowInteractor 无法工作的问题。

就是这样!享受可视化事物的乐趣。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 XCode 7.0.1 中设置 VTK 6.1 的相关文章

  • 部署目标是什么意思?

    这是我假设的一个非常简单的问题 有人可以告诉我部署目标是什么意思吗 如果我选择 iOS 10 是否意味着只有 iOS 10 的用户才能下载该应用程序 选择较低的部署目标是否不好 另外 继续部署目标 是否不建议在较低的部署目标上运行 假设您已
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 在调用堆栈中看到大量 clr!CLR Semaphore::Wait

    我们看到很多像下面这样的调用堆栈 我可以知道什么条件 情况会发生这种情况吗 OS Thread Id 0x48654 559 Current frame ntdll NtWaitForSingleObject 0xa Child SP Re
  • 操作/Lambda 表达式内存管理问题

    我将一个操作存储在局部变量中 然后在该局部变量超出范围后使用 使用前是否有被清理的危险 这是一个例子 public List GetMaps Action
  • 在 C# 中调用事件处理程序

    我一直在尝试学习如何在 C 中使用事件处理程序 但我无法弄清楚 handler this e 在以下代码中的作用 public event EventHandler ThresholdReached protected virtual vo
  • C++:将模板参数的模板类型成员添加为好友的正确语法?

    我有一个带有模板类型参数 tTRAIT 的类 我想加一个模板为好友type member aliastTRAIT 但我无法弄清楚语法 这可能吗 template
  • 如何使用boost库读取和写入.ini文件[重复]

    这个问题在这里已经有答案了 如何使用boost库读取和写入 或修改 ini文件 With Boost PropertyTree您可以读取并更新树 然后写入文件 请参阅load and save功能 看一下如何访问属性树中的数据 http w
  • WinForms - 表单大小错误

    我们有以下代码 private void MainForm Shown object sender EventArgs e RepositionForm private void RepositionForm Rectangle rect
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我
  • 按值返回的函数的返回语句中的初始化

    我的问题源于深入研究std move in return语句 例如以下示例 struct A A std cout lt lt Constructed lt lt this lt lt std endl A A noexcept std c
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • 数组与映射的性能

    我必须循环一个大数组中的元素子集 其中每个元素都指向另一个元素 问题来自于检测大图中的连接组件 我的算法如下 1 考虑第一个元素 2 将下一个元素视为前一个元素所指向的元素 3 循环直到没有发现新元素 4 考虑1 3中尚未考虑的下一个元素
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • EWS - 给予预约,获取预约的所有者副本

    在 EWS 中进行预约后 是否可以获得所有者的副本 例如 如果我登录为user1 我有user1创建的约会的副本user2 我有冒充权 我要编辑user2预约的副本 我怎样才能获得user2 s copy 您可以使用 PidLidClean
  • 未找到 _sqlite3_open 等符号错误

    您好 我收到此错误 Undefined symbols sqlite3 open referenced from main in ccRlWVer o sqliite3 close referenced from main in ccRlW
  • Mac OS X 下的 JavaFX:系统菜单和模态窗口

    我目前面临 Mac OS X 下的 JavaFX 菜单和模式对话框的问题 我正在使用该方法 MenuBar setUseSystemMenuBar true 为了将系统菜单栏用于我的应用程序菜单 这工作正常 但如果模式对话框打开 菜单不会被
  • C# amo 获取角色完整

    我正在开发一个 SSAS 项目 其中除其他事项外 我需要获取 C 中表格多维数据集的完整用户列表 目前我让它以这样的方式工作 我可以获得角色 但数据不完整 当我调用 Server Database Roles 为了便于阅读而简化 属性并枚举
  • 类模板的 C++ 静态成员 - 链接器警告“多重定义”[重复]

    这个问题在这里已经有答案了 假设出于某种原因 我想要一个类模板 MyTemp 和一些静态数据成员 smDummyVar Mytemp h ifndef MY TEMP H define MY TEMP H template

随机推荐