VTK_开发环境搭建(VTK-9.3.0,macOS_14_Sonoma,M2Pro_ARM64)

1. 编译环境

  • JDK(17,可选);
  • Python(3.12,可选);
  • Clang(Apple clang version 15.0.0);
  • QT(6.6.2,默认支持源码调试);
  • CMake(3.29);
  • VTK(9.3.0);
# 编译之前需要安装graphviz,否则报错;
label@Label-MacBookPro ~ /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
label@Label-MacBookPro ~ brew install graphviz

2. 编译配置(CMake)

VTK_BUILD_DOCUMENTATION  YES
VTK_BUILD_EXAMPLES      YES
CMAKE_BUILD_TYPE        release
CMAKE_INSTALL_PREFIX    /Users/label/Tools.localized/VTK/vtk-9.3.0
VTK_WRAP_JAVA        YES
VTK_WRAP_PYTHON      YES
VTK_GROUP_ENABLE_Qt    WANT
VTK_QT_VERSION         6
QMLPLUGINDUMP_EXECUTABLE   Qt/6.6.2/macos/bin/qmlplugindump
3.3 编译安装
# 编译代码;
label@Label-MacBookPro build % make -j8

# 生成文档;
label@Label-MacBookPro build % make DoxygenDoc

# 安装程序;
label@Label-MacBookPro build % make install

4. 错误处理

4.1 编译错误(File too big / too many sections)
错误信息:

Undefined symbols for architecture arm64:
"_vtkCompositePolyDataMapper_Typecast", referenced from:
_vtkCompositeSurfaceLICMapper_Typecast in vtkCompositeSurfaceLICMapperJava.cxx.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

解决方法:
/Users/label/Tools.localized/VTK/build/Wrapping/Java/CMakeFiles/vtkRenderingLICOpenGL2Java/vtkCompositeSurfaceLICMapperJava.cxx,增加无法链接的函数定义;
extern "C" JNIEXPORT void* vtkObjectBase_Typecast(void* me,char* dType)
{
  if (!strcmp("vtkObjectBase",dType)) { return me; }
  return nullptr;
}

extern "C" JNIEXPORT void* vtkObject_Typecast(void* me,char* dType)
{
  void* res;
  if (!strcmp("vtkObject",dType)) { return me; }
  if ((res= vtkObjectBase_Typecast(me,dType)) != nullptr) { return res; }
  return nullptr;
}

extern "C" JNIEXPORT void* vtkAlgorithm_Typecast(void* me,char* dType)
{
  void* res;
  if (!strcmp("vtkAlgorithm",dType)) { return me; }
  if ((res= vtkObject_Typecast(me,dType)) != nullptr) { return res; }
  return nullptr;
}

extern "C" JNIEXPORT void* vtkAbstractMapper_Typecast(void* me,char* dType)
{
  void* res;
  if (!strcmp("vtkAbstractMapper",dType)) { return me; }
  if ((res= vtkAlgorithm_Typecast(me,dType)) != nullptr) { return res; }
  return nullptr;
}

extern "C" JNIEXPORT void* vtkMapper2D_Typecast(void* me,char* dType)
{
  void* res;
  if (!strcmp("vtkMapper2D",dType)) { return me; }
  if ((res= vtkAbstractMapper_Typecast(me,dType)) != nullptr) { return res; }
  return nullptr;
}

extern "C" JNIEXPORT void* vtkAbstractMapper3D_Typecast(void* me,char* dType)
{
  void* res;
  if (!strcmp("vtkAbstractMapper3D",dType)) { return me; }
  if ((res= vtkAbstractMapper_Typecast(me,dType)) != nullptr) { return res; }
  return nullptr;
}

extern "C" JNIEXPORT void* vtkMapper_Typecast(void* me,char* dType)
{
  void* res;
  if (!strcmp("vtkMapper",dType)) { return me; }
  if ((res= vtkAbstractMapper3D_Typecast(me,dType)) != nullptr) { return res; }
  return nullptr;
}

extern "C" JNIEXPORT void* vtkPolyDataMapper_Typecast(void* me,char* dType)
{
  void* res;
  if (!strcmp("vtkPolyDataMapper",dType)) { return me; }
  if ((res= vtkMapper_Typecast(me,dType)) != nullptr) { return res; }
  return nullptr;
}

extern "C" JNIEXPORT void* vtkCompositePolyDataMapper_Typecast(void* me,char* dType)
{
  void* res;
  if (!strcmp("vtkCompositePolyDataMapper",dType)) { return me; }
  if ((res= vtkPolyDataMapper_Typecast(me,dType)) != nullptr) { return res; }
  return nullptr;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢小觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值