1. 编译环境
JDK(17,可选); Python(3.12,可选); Clang(Apple clang version 15.0.0); QT(6.6.2,默认支持源码调试); CMake(3.29); VTK(9.3.0);
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 ;
}