C++ extension for 5.12 is not working (MacOS)

@ebrahim @Sam_Horvath @lassoan this is urgent:

I just downloaded 5.12 for my MacOS, and quite a few of the C++ extension are installed but non-functional for due to library mismatch. I need these extensions for my SlicerMorph workshop starting on Monday:

  1. SurfaceMarkups
  2. Model2Model distance
  3. Markups2Models
  4. Sandbox
  5. SegmentEditorExtraEffects

[Qt] Error(s):

[Qt] Cannot load library /Applications/Slicer.app/Contents/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/qt-loadable-modules/libqSlicerGridSurfaceMarkupsModule.dylib: (dlopen(/Applications/Slicer.app/Contents/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/qt-loadable-modules/libqSlicerGridSurfaceMarkupsModule.dylib, 0x0085): Library not loaded: @rpath/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib

[Qt] Referenced from: /Applications/Slicer.app/Contents/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/qt-loadable-modules/libqSlicerGridSurfaceMarkupsModule.dylib

[Qt] Reason: tried: ‘/D/S/A/teem-build/bin/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/qRestAPI-build/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/qRestAPI-build/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/teem-build/bin/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/qRestAPI-build/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/qRestAPI-build/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/Applications/Slicer.app/Contents/Frameworks/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/Applications/Slicer.app/Contents/Frameworks/QtCore.framework/Versions/5/Frameworks/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/Applications/Slicer.app/Contents/MacOS/../Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/CTK-build/CMakeExternals/Install/lib/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/CTK-build/CMakeExternals/Install/lib/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/teem-build/bin/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file))

[Qt] Error(s):

[Qt] Cannot load library /Applications/Slicer.app/Contents/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/qt-loadable-modules/libqSlicerMarkupsToModelModule.dylib: (dlopen(/Applications/Slicer.app/Contents/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/qt-loadable-modules/libqSlicerMarkupsToModelModule.dylib, 0x0085): Library not loaded: @rpath/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib

[Qt] Referenced from: <9E032141-621C-3FE9-9137-A62E008DB619> /Applications/Slicer.app/Contents/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/qt-loadable-modules/libqSlicerMarkupsToModelModule.dylib

[Qt] Reason: tried: ‘/D/S/A/teem-build/bin/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/qRestAPI-build/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/qRestAPI-build/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/teem-build/bin/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/qRestAPI-build/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/qRestAPI-build/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/Applications/Slicer.app/Contents/Frameworks/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/Applications/Slicer.app/Contents/Frameworks/QtCore.framework/Versions/5/Frameworks/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/Applications/Slicer.app/Contents/MacOS/../Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/CTK-build/CMakeExternals/Install/lib/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/CTK-build/CMakeExternals/Install/lib/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/teem-build/bin/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/MarkupsToModel/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file))

dlopen(/Applications/Slicer.app/Contents/Extensions-34621/Sandbox/lib/Slicer-5.12/qt-loadable-modules/vtkSlicerCombineModelsModuleLogicPython.so, 0x0002): Library not loaded: @rpath/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib

Referenced from: /Applications/Slicer.app/Contents/Extensions-34621/Sandbox/lib/Slicer-5.12/qt-loadable-modules/vtkSlicerCombineModelsModuleLogicPython.so

Reason: tried: ‘/D/S/A/teem-build/bin/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/qRestAPI-build/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/qRestAPI-build/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/teem-build/bin/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/qRestAPI-build/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/qRestAPI-build/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/Applications/Slicer.app/Contents/MacOS/../Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/CTK-build/CMakeExternals/Install/lib/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/CTK-build/CMakeExternals/Install/lib/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/teem-build/bin/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/Sandbox/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file)

[Qt] libpng warning: iCCP: profile ‘ICC Profile’: ‘CMYK’: invalid ICC profile color space

[Qt] libpng warning: iCCP: known incorrect sRGB profile

dlopen(/Applications/Slicer.app/Contents/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/qt-loadable-modules/vtkSlicerSegmentEditorFastMarchingModuleLogicPython.so, 0x0002): Library not loaded: @rpath/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib

Referenced from: <76343D83-A509-3A6C-8A39-11770DC16B0A> /Applications/Slicer.app/Contents/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/qt-loadable-modules/vtkSlicerSegmentEditorFastMarchingModuleLogicPython.so

Reason: tried: ‘/D/S/A/teem-build/bin/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/qRestAPI-build/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/qRestAPI-build/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/teem-build/bin/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/qRestAPI-build/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/qRestAPI-build/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/Applications/Slicer.app/Contents/MacOS/../Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/CTK-build/CMakeExternals/Install/lib/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/CTK-build/CMakeExternals/Install/lib/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/D/S/A/teem-build/bin/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file), ‘/System/Volumes/Preboot/Cryptexes/OS/D/S/A/teem-build/bin/Extensions-34621/SegmentEditorExtraEffects/lib/Slicer-5.12/libopenjp2.7.dylib’ (no such file)

@ebrahim @Sam_Horvath This is claude’s diagnosis:

This is a known Slicer packaging bug on macOS, not a problem with your install or with SurfaceMarkup specifically — and I confirmed it directly on your machine: every C++ loadable extension you have installed (SurfaceMarkup, MarkupsToModel, Sandbox, SegmentEditorExtraEffects) has the same defect, so they will all fail to load the same way.

The chain of causes:

  1. Slicer 5.12 ships DCMTK with JPEG 2000 support via OpenJPEG. DCMTK’s dcmjp2kcs module exported openjp2 in its public CMake link interface, so every extension that links anything DCMTK-related (which is essentially any C++ extension, via the Slicer base libraries) ends up with a direct load command on libopenjp2.7.dylib — even though none of them use JPEG 2000. I verified with otool -L: your SurfaceMarkup module directly references @rpath/Extensions-34621/SurfaceMarkup/lib/Slicer-5.12/libopenjp2.7.dylib.
  2. The extension packaging step rewrites that reference to point inside the extension’s own lib folder, but never copies libopenjp2.7.dylib into the extension package. The file simply isn’t there, so dlopen fails and the module doesn’t load. (The garbage “tried: /D/S/A/teem-build/…” paths are leftover rpaths from the factory build machine — a red herring.)

This was fixed upstream three days ago in Slicer PR #9263 (merged 2026-06-30, to main), which makes DCMTK link OpenJPEG privately — the PR description even cites MarkupsToModel as the affected example. A related fix, PR #9228, addressed the missing lib in the main app package. Because the 5.12 stable app (rev 34621) is already released, the extensions built for it still carry the over-linked reference until the factory’s stable build tree picks up the fix and rebuilds the extensions.

Indeed this issue is present for specifically macOS when using Slicer 5.12. It was fixed in the recent preview. For Monday you’ll either need to use latest Slicer Preview or continue to use Slicer 5.10.

A Slicer 5.12.1 won’t be finalized yet for Monday.

Sorry for the inconvenience. Automated testing and testing on developer computers did not detect this issue, as it only appears if the application is installed, on macOS, when the extension contain loadable modules.

You can use other versions, as @jamesobutler described. Some more details:

If convenient installation is important then Slicer-5.10 is the better option, because it is signed, so you don’t need jump through a lot of hoops to allow installation. → Download 3D Slicer | 3D Slicer

If you need some of the latest features or fixes then you can use yesterday’s preview release. Don’t use the very latest version, because depending on the time of day, the extension on macOS may not be available yet (due to some macOS factory issue, which will be fixed in the next couple of days by replacing the machine). → Download 3D Slicer | 3D Slicer

Unfortunately 5.10 lacks some of the features so it is not an option. And I don’t want to make people to download multiple versions either.

I am curious why it takes so long to build the stable. Looks like PR is from 3 days ago?

It’s not the build time, it’s the manual steps required to sign and update things that make it a bit of a pain now to generate a patch release.

For Monday I’d suggest just using the Preview build and removing the quarantine flag on macs.

People can just do xattr -dr com.apple.quarantine /Applications/Slicer.app

There is no need for multiple versions. Everyone can download the same working Slicer Preview Release from this link: https://download.slicer.org/?date=2026-07-02.

The annoying part is the 4-5 extra clicks needed for installing an unsigned package on Windows and macOS. On macOS those extra clicks are in System Settings (or need to type the terminal as @pieper described above).