Slicer for Ubuntu arm64

Adam,
I Thank you for the word you have been doing, I have been looking for someone compiling something like this for a while. I got the Galaxy Book S as soon as it dropped thinking that I was gonna step into the future and have a bad-ass 8 core processor computer. Little did I know about software limitations… Anyways bro man, could you please allow me to get a copy of your software. Pretty please. Id even cash app you or bit coin you some funds !! Please let me know confidentconstruction@live.com

Hey Jonatron,

Unfortunately there is no 64 bit ARM build for Slicer with hardware GPU acceleration.

Adam

If you want to run Slicer on a tablet then the simplest and cheapest solution is to get a Windows tablet. Slicer works nicely on a Microsoft Surface Pro.

Dear Adam,
Recently I put my hands on a NVIDIA Jetson Orin Nano with an arm64 chip in it. Do I understand it wight, even if I successfully build a Slicer on arm64, it won’t still support the GPU acceleration?
Thanks!
Bohdan

Someone with more knowledge of OpenGLES and the mobile graphics stack will probably be able to get it working. If I remember correctly the key problem was that OpenGLES assumes a single context to render in, whereas Slicer uses many.

Eventually I gave up

1 Like

I don’t know if this answers your question, but here is a video of an aarch64 build of Slicer.

It is not running on bare metal, rather in Arch, itself in a chroot environment on my phone. There’s an additional delay in every display update because of X11 forwarding over WiFi, and because my laptop’s screen’s resolution is rather high at 2560x1440.

The phone’s CPU is Qualcomm® Snapdragon™ 778G:
CPU: Qualcomm® Kryo™ 670, octa-core CPU, up to 2.4GHz
GPU: Qualcomm® Adreno™ 642L GPU

As I see, volume rendering seems to work, not as fluid as on x86_64, it is expected.

I don’t have all the details of the build in mind, but may find some in the build tree.

1 Like

Thank you for your answer!

In the meantime I have made some progress in cmake-ing a Slicer build on NVIDIA Jetson Orin.

Unfortunately it’s stuck on:

...
[ 40%] Performing build step for 'teem'
Consolidate compiler generated dependencies of target teem
[  0%] Linking C shared library bin/libteem.so
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__length_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): in function `slicer_zlib__tr_tally':
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1040:(.text+0x3414): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__dist_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1041:(.text+0x3470): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__dist_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1041:(.text+0x3494): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__length_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): in function `compress_block':
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1091:(.text+0x3728): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__dist_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1099:(.text+0x3ac4): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__dist_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1099:(.text+0x3ae4): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(zutil.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib_z_errmsg' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(zutil.c.o): in function `slicer_zlib_zError':
/home/bohdan/Slicer-SuperBuild/zlib/zutil.c:136:(.text+0x74): dangerous relocation: unsupported relocation
collect2: error: ld returned 1 exit status
make[5]: *** [CMakeFiles/teem.dir/build.make:5346: bin/libteem.so.1.12.0] Error 1
make[4]: *** [CMakeFiles/Makefile2:118: CMakeFiles/teem.dir/all] Error 2
make[3]: *** [Makefile:136: all] Error 2
make[2]: *** [CMakeFiles/teem.dir/build.make:90: teem-prefix/src/teem-stamp/teem-build] Error 2
make[1]: *** [CMakeFiles/Makefile2:299: CMakeFiles/teem.dir/all] Error 2
make: *** [Makefile:101: all] Error 2

VTK didn’t want to be complied either with the same mistake, but under sudo make VTK compilation ran successfully without any change in cmake.

However it doesn’t want to suppress the building of teem so that I can proceed. Any ideas?

Thank you!

UPDATE:

teem built, after specifying Teem_DIR in cmake.

Process stuck on LibArchive.

[ 55%] Generate version-LibArchive.txt and license-LibArchive.txt
[ 56%] Performing update step for 'LibArchive'
[ 56%] No patch step for 'LibArchive'
[ 57%] Performing configure step for 'LibArchive'
loading initial cache file /home/bohdan/Slicer-SuperBuild/LibArchive-prefix/tmp/LibArchive-cache-Debug.cmake
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bohdan/Slicer-SuperBuild/LibArchive-build
[ 57%] Performing build step for 'LibArchive'
Consolidate compiler generated dependencies of target archive
[  1%] Linking C shared library libarchive.so
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__length_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): in function `slicer_zlib__tr_tally':
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1040:(.text+0x3414): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__dist_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1041:(.text+0x3470): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__dist_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1041:(.text+0x3494): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__length_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): in function `compress_block':
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1091:(.text+0x3728): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__dist_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1099:(.text+0x3ac4): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(trees.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib__dist_code' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib/trees.c:1099:(.text+0x3ae4): dangerous relocation: unsupported relocation
/usr/bin/ld: /home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(zutil.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `slicer_zlib_z_errmsg' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/bohdan/Slicer-SuperBuild/zlib-install/lib/libzlib.a(zutil.c.o): in function `slicer_zlib_zError':
/home/bohdan/Slicer-SuperBuild/zlib/zutil.c:136:(.text+0x74): dangerous relocation: unsupported relocation
collect2: error: ld returned 1 exit status
make[5]: *** [libarchive/CMakeFiles/archive.dir/build.make:2018: libarchive/libarchive.so.19] Error 1
make[4]: *** [CMakeFiles/Makefile2:216: libarchive/CMakeFiles/archive.dir/all] Error 2
make[3]: *** [Makefile:136: all] Error 2
make[2]: *** [CMakeFiles/LibArchive.dir/build.make:90: LibArchive-prefix/src/LibArchive-stamp/LibArchive-build] Error 2
make[1]: *** [CMakeFiles/Makefile2:409: CMakeFiles/LibArchive.dir/all] Error 2
make: *** [Makefile:101: all] Error 2

This patch was helpful:

diff --git a/SuperBuild/External_zlib.cmake b/SuperBuild/External_zlib.cmake
index 5257ac65f2..13b6afeb84 100644
--- a/SuperBuild/External_zlib.cmake
+++ b/SuperBuild/External_zlib.cmake
@@ -36,7 +36,7 @@ if(NOT DEFINED ZLIB_ROOT AND NOT Slicer_USE_SYSTEM_${proj})
     "66a753054b356da85e1838a081aa94287226823e"
     QUIET
     )
-
+  set(cflags "${ep_common_c_flags} -fPIC")
   ExternalProject_Add(${proj}
     ${${proj}_EP_ARGS}
     GIT_REPOSITORY "${Slicer_${proj}_GIT_REPOSITORY}"
@@ -48,7 +48,7 @@ if(NOT DEFINED ZLIB_ROOT AND NOT Slicer_USE_SYSTEM_${proj})
       ## CXX should not be needed, but it a cmake default test
       -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
       -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
-      -DCMAKE_C_FLAGS:STRING=${ep_common_c_flags}
+      -DCMAKE_C_FLAGS:STRING=${cflags}
       -DZLIB_MANGLE_PREFIX:STRING=slicer_zlib_
       -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
     DEPENDS

Wonderful!

I just have added -fPIC in CMAKE_C_FLAGS and ADDITIONAL_C_FLAGS (I have used gui).

and after sudo make --debug LibArchive it has successfully remade it:

[100%] Built target LibArchive
Successfully remade target file 'CMakeFiles/LibArchive.dir/all'.
Successfully remade target file 'CMakeFiles/LibArchive.dir/rule'.
Must remake target 'LibArchive'.
Successfully remade target file 'LibArchive'.
Successfully remade target file 'LibArchive'.

Now I’m running the whole make.

Okay,

I have made some progress. It has successfully built all necessary components, but while making Slicer it ended up in following error.

[ 41%] Building CXX object Base/QTGUI/CMakeFiles/qSlicerBaseQTGUI.dir/qSlicerSettingsInternationalizationPanel.cxx.o
    Successfully remade target file 'Base/QTGUI/CMakeFiles/qSlicerBaseQTGUI.dir/qSlicerSettingsInternationalizationPanel.cxx.o'.
     File 'Base/QTGUI/CMakeFiles/qSlicerBaseQTGUI.dir/qSlicerWebPythonProxy.cxx.o' does not exist.
    Must remake target 'Base/QTGUI/CMakeFiles/qSlicerBaseQTGUI.dir/qSlicerWebPythonProxy.cxx.o'.
[ 41%] Building CXX object Base/QTGUI/CMakeFiles/qSlicerBaseQTGUI.dir/qSlicerWebPythonProxy.cxx.o
/home/bohdan/Slicer/Base/QTGUI/qSlicerWebPythonProxy.cxx: In member function ‘QString qSlicerWebPythonProxy::evalPython(const QString&, int)’:
/home/bohdan/Slicer/Base/QTGUI/qSlicerWebPythonProxy.cxx:99:3: error: ‘ctkAbstractPythonManager’ has not been declared
   99 |   ctkAbstractPythonManager::ExecuteStringMode executeStringMode{ctkAbstractPythonManager::FileInput};
      |   ^~~~~~~~~~~~~~~~~~~~~~~~
/home/bohdan/Slicer/Base/QTGUI/qSlicerWebPythonProxy.cxx:103:7: error: ‘executeStringMode’ was not declared in this scope
  103 |       executeStringMode = ctkAbstractPythonManager::EvalInput;
      |       ^~~~~~~~~~~~~~~~~
/home/bohdan/Slicer/Base/QTGUI/qSlicerWebPythonProxy.cxx:103:27: error: ‘ctkAbstractPythonManager’ has not been declared
  103 |       executeStringMode = ctkAbstractPythonManager::EvalInput;
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
/home/bohdan/Slicer/Base/QTGUI/qSlicerWebPythonProxy.cxx:106:27: error: ‘ctkAbstractPythonManager’ has not been declared
  106 |       executeStringMode = ctkAbstractPythonManager::FileInput;
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
/home/bohdan/Slicer/Base/QTGUI/qSlicerWebPythonProxy.cxx:109:27: error: ‘ctkAbstractPythonManager’ has not been declared
  109 |       executeStringMode = ctkAbstractPythonManager::SingleInput;
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
make[5]: *** [Base/QTGUI/CMakeFiles/qSlicerBaseQTGUI.dir/build.make:1382: Base/QTGUI/CMakeFiles/qSlicerBaseQTGUI.dir/qSlicerWebPythonProxy.cxx.o] Error 1
make[4]: *** [CMakeFiles/Makefile2:6394: Base/QTGUI/CMakeFiles/qSlicerBaseQTGUI.dir/all] Error 2
make[3]: *** [Makefile:166: all] Error 2
make[2]: *** [CMakeFiles/Slicer.dir/build.make:90: Slicer-prefix/src/Slicer-stamp/Slicer-build] Error 2
make[1]: *** [CMakeFiles/Makefile2:608: CMakeFiles/Slicer.dir/all] Error 2
make: *** [Makefile:101: all] Error 2

And now I’m officially stuck. The built was without Python.

If you just want to see if you can get a build, I suggest commenting out those lines that don’t compile. You can add them back later once you know that the application runs. That build error looks fixable but it’s not in a part of the code you are likely to need.

Thank you!

Just have disabled the Slicer_BUILD_WEBENGINE_SUPPORT. Re-running!

Bohdan

No luck.

It has successfully finished compiling:


... (shortened)
[ 97%] Completed 'Slicer'
 File 'CMakeFiles/Slicer.dir/build' does not exist.
   File 'Slicer' does not exist.
     File 'CMakeFiles/Slicer' does not exist.
    Must remake target 'CMakeFiles/Slicer'.
    Successfully remade target file 'CMakeFiles/Slicer'.
  Must remake target 'Slicer'.
  Successfully remade target file 'Slicer'.
Must remake target 'CMakeFiles/Slicer.dir/build'.
Successfully remade target file 'CMakeFiles/Slicer.dir/build'.
[100%] Built target Slicer
 File 'all' does not exist.
Must remake target 'all'.
Successfully remade target file 'all'.
  Successfully remade target file 'all'.
Must remake target 'default_target'.
Successfully remade target file 'default_target'.
bohdan@bohdan-desktop:~/Slicer-SuperBuild$ cd Slicer-build/
bohdan@bohdan-desktop:~/Slicer-SuperBuild/Slicer-build$ ./Slicer
-bash: ./Slicer: cannot execute binary file: Exec format error
bohdan@bohdan-desktop:~/Slicer-SuperBuild/Slicer-build$ sudo ctest -j6
Test project /home/bohdan/Slicer-SuperBuild/Slicer-build

... (shortened)

        Start 472: FiducialRegistrationTest
430/481 Test #472: FiducialRegistrationTest ....................................***Failed    0.04 sec

# only few errors have a comment of missing regex:

        Start 478: slicer_nomainwindow_DisableModulesCommandLineOptionsTest
436/481 Test #478: slicer_nomainwindow_DisableModulesCommandLineOptionsTest ....***Failed  Required regular expression not found. Regex=[Number of loaded modules: 1
]  0.05 sec


... (shortened)

2% tests passed, 473 tests failed out of 481

Label Time Summary:
AddScalarVolumes                       =   0.43 sec*proc (11 tests)
CMake                                  =   0.26 sec*proc (7 tests)
CastScalarVolume                       =   0.31 sec*proc (8 tests)
CheckerBoardFilter                     =   0.04 sec*proc (1 test)
CreateDICOMSeries                      =   0.04 sec*proc (1 test)
DiffusionTensorTest                    =   0.04 sec*proc (1 test)
ExecutionModelTour                     =   0.04 sec*proc (1 test)
ExtractSkeleton                        =   0.04 sec*proc (1 test)
FiducialRegistration                   =   0.04 sec*proc (1 test)
GaussianBlurImageFilter                =   0.04 sec*proc (1 test)
GradientAnisotropicDiffusion           =   0.08 sec*proc (2 tests)
GrayscaleFillHoleImageFilter           =   0.04 sec*proc (1 test)
GrayscaleGrindPeakImageFilter          =   0.04 sec*proc (1 test)
GrayscaleModelMaker                    =   0.04 sec*proc (1 test)
HistogramMatching                      =   0.04 sec*proc (1 test)
ImageLabelCombine                      =   0.04 sec*proc (1 test)
LabelMapSmoothing                      =   0.04 sec*proc (1 test)
MRMLCore                               =   4.58 sec*proc (121 tests)
MRMLDisplayableManager                 =   0.26 sec*proc (8 tests)
MRMLLogic                              =   0.46 sec*proc (13 tests)
MaskScalarVolume                       =   0.04 sec*proc (1 test)
MedianImageFilter                      =   0.08 sec*proc (2 tests)
MergeModels                            =   0.12 sec*proc (3 tests)
ModelMaker                             =   0.28 sec*proc (7 tests)
ModelToLabelMap                        =   0.08 sec*proc (2 tests)
MultiplyScalarVolumes                  =   0.04 sec*proc (1 test)
N4ITKBiasFieldCorrection               =   0.04 sec*proc (1 test)
OrientScalarVolume                     =   0.12 sec*proc (3 tests)
PETStandardUptakeValueComputation      =   0.04 sec*proc (1 test)
ResampleDTIVolume                      =   0.26 sec*proc (7 tests)
ResampleScalarVectorDWIVolume          =   0.26 sec*proc (6 tests)
ResampleScalarVolume                   =   0.04 sec*proc (1 test)
RobustStatisticsSegmenter              =   0.05 sec*proc (1 test)
SimpleRegionGrowingSegmentation        =   0.04 sec*proc (1 test)
SlicerBaseLogic                        =   0.13 sec*proc (3 tests)
SubtractScalarVolumes                  =   0.04 sec*proc (1 test)
TestGridTransformRegistration          =   0.04 sec*proc (1 test)
ThresholdScalarVolume                  =   0.04 sec*proc (1 test)
VotingBinaryHoleFillingImageFilter     =   0.04 sec*proc (1 test)
qMRMLWidgets                           =   2.74 sec*proc (93 tests)
qSlicerAnnotationsModule               =   0.09 sec*proc (2 tests)
qSlicerApp                             =   0.09 sec*proc (2 tests)
qSlicerBaseQTApp                       =   0.08 sec*proc (2 tests)
qSlicerBaseQTCLI                       =   0.11 sec*proc (3 tests)
qSlicerBaseQTCore                      =   0.26 sec*proc (6 tests)
qSlicerBaseQTGUI                       =   0.39 sec*proc (11 tests)
qSlicerCamerasModule                   =   0.18 sec*proc (4 tests)
qSlicerColorsModule                    =   0.13 sec*proc (3 tests)
qSlicerCropVolumeModule                =   0.12 sec*proc (3 tests)
qSlicerDataModule                      =   0.13 sec*proc (3 tests)
qSlicerMarkupsModule                   =   0.87 sec*proc (20 tests)
qSlicerModelsModule                    =   0.25 sec*proc (6 tests)
qSlicerModelsModuleWidgets             =   0.09 sec*proc (2 tests)
qSlicerModulesCore                     =   0.16 sec*proc (5 tests)
qSlicerPlotsModule                     =   0.08 sec*proc (2 tests)
qSlicerPlotsModuleWidgets              =   0.05 sec*proc (1 test)
qSlicerReformatModule                  =   0.09 sec*proc (2 tests)
qSlicerSceneViewsModule                =   0.14 sec*proc (3 tests)
qSlicerSegmentationsModule             =   0.09 sec*proc (2 tests)
qSlicerSequencesModule                 =   0.27 sec*proc (6 tests)
qSlicerSequencesModuleWidgets          =   0.08 sec*proc (2 tests)
qSlicerSubjectHierarchyModule          =   0.14 sec*proc (3 tests)
qSlicerTablesModule                    =   0.13 sec*proc (3 tests)
qSlicerTablesModuleWidgets             =   0.04 sec*proc (1 test)
qSlicerTerminologiesModule             =   0.09 sec*proc (2 tests)
qSlicerTextsModule                     =   0.08 sec*proc (2 tests)
qSlicerTransformsModule                =   0.12 sec*proc (3 tests)
qSlicerTransformsModuleWidgets         =   0.09 sec*proc (2 tests)
qSlicerUnitsModule                     =   0.14 sec*proc (3 tests)
qSlicerViewControllersModule           =   0.09 sec*proc (2 tests)
qSlicerVolumeRenderingModule           =   0.51 sec*proc (11 tests)
qSlicerVolumesModule                   =   0.28 sec*proc (6 tests)
qSlicerVolumesModuleWidgets            =   0.14 sec*proc (3 tests)
qSlicerWelcomeModule                   =   0.09 sec*proc (2 tests)
vtkAddon                               =   0.22 sec*proc (5 tests)
vtkSegmentationCore                    =   0.20 sec*proc (5 tests)
vtkSlicerColorsModuleLogic             =   0.04 sec*proc (1 test)
vtkSlicerTransformsModuleLogic         =   0.12 sec*proc (3 tests)
vtkSlicerVolumeRenderingModuleLogic    =   0.09 sec*proc (2 tests)
vtkTeem                                =   0.04 sec*proc (1 test)

Total Test time (real) =   3.61 sec

The following tests FAILED:
	  8 - vtkAddonMathUtilitiesTest1 (Failed)
	  9 - vtkAddonSingletonTest1 (Failed)
	... (shortened)
	480 - slicer_nomainwindow_NoApplicationInformationOptionTest (Failed)
	481 - slicer_nomainwindow_ApplicationInformationOptionTest (Failed)
Errors while running CTest
Output from these tests are in: /home/bohdan/Slicer-SuperBuild/Slicer-build/Testing/Temporary/LastTest.log
Use "--rerun-failed --output-on-failure" to re-run the failed cases verbosely.

Any ideas, why it might compile but don’t run?

Does the application run at all? Are you able to run it in a debugger? If it won’t start can you use the launcher to create a shell with all the path settings and then run ldd? If it tries to start but fails can you use strace to figure out where?

My guess is that if you just work through one representative failing test and get it working many others will also start working.

Execution fails.

bohdan@bohdan-desktop:~/Slicer-SuperBuild/Slicer-build$ ./Slicer
-bash: ./Slicer: cannot execute binary file: Exec format error

I will try with launcher as well! Thank you!

When I last attempted this, the CTK launcher project needs to be modified to work for ARM64

Specifically modify it to download the aarch build

To me, it spells mismatch between architectures, like a binary for aarch64 executed on x86_64 or the other way round.

It’s already surprising that you got past CTKAPPLAUNCHER. As I understand, the build process downloads an online pre-built binary and there’s none online for aarch64.

As a workaround, I built the launcher for aarch64 in CTKAppLauncherLib-build and copied the result in CTKAPPLAUNCHER. Perhaps External_CTKAPPLAUNCHER.cmake must be modified to point to this launcher, I don’t remember exactly how I completed this step. (Why is it not always compiled locally?)

Are you building on an aarch64 hardware? Virtualising? Cross-compiling using a native compiler like aarch64-linux-gnu-g++ (failed for me)? Cross-compiling using a chroot in an aarch64 image (succeeded for me)?

I have rebuilt CTKAppLauncher with aarch64.tar.gz release:

bohdan@bohdan-desktop:~$ CTKAppLauncher --launcher-version
CTKAppLauncher launcher version 0.1.29

I’m building it all on NVIDIA Jetson Nano Orin. ARM64 chip with a native aarch64-linux-gnu-g++ compiler.

UPD: I’m recompiling the whole project now.