Perl und Tk auf dem Mac (Apple Silicon)
Diese Hilfe beschreibt typische Probleme beim Installieren des CPAN-Moduls Tk (Perl/Tk, nicht Tcl/Tk allein) unter macOS mit Apple Silicon (arm64) und wie Sie sie mit Homebrew und einer sauberen Toolchain in der Regel lösen.
Was schiefgehen kann
-
„C compiler cannot create executables“ während
cpanm Tk/cpan Tk, oft im UnterverzeichnisJPEG/jpeg(mitgeliefertes libjpeg). -
Anschließend:
Error opening Makefileim JPEG-Teil — Folgefehler, weilconfigurekein Makefile erzeugt hat. -
Pfade: Perl/Tk prüft System-libjpeg
zuerst mit fest eingebauten Pfaden unter
/usr/local/include. Homebrew auf Apple Silicon legt Bibliotheken dagegen typischerweise unter/opt/homebrewab. Der Test schlägt fehl → Tk versucht, das alte Bundled-libjpeg zu bauen — und das scheitert häufig an den strengen Compiler-Flags von Perl/MakeMaker. - Architektur: Perl-Interpreter als x86_64 (Rosetta) während Libraries arm64 (oder umgekehrt) führt zu Link- oder Laufzeitproblemen.
Voraussetzungen (Homebrew & Compiler)
-
Xcode Command Line Tools installieren (Compiler
clang):xcode-select --install -
Homebrew für Apple Silicon nutzen (Präfix meist
/opt/homebrew). -
Empfehlung: Perl von Homebrew für ein durchgängiges
arm64-Setup:
Prüfen:brew install perl brew install cpanminusuname -m # arm64 file "$(which perl)" # arm64
Lösung: System-libjpeg sichtbar machen (Homebrew)
Damit Perl/Tk nicht das Bundled-libjpeg bauen muss,
sollte libjpeg von Homebrew dort liegen, wo Tk es
erwartet (/usr/local/include und
/usr/local/lib), oder Sie stellen die Pfade so ein, dass
der integrierte Test -ljpeg findet.
Variante A (häufig erfolgreich):
jpeg installieren und Symlinks nach
/usr/local (einmalig, benötigt Administratorrechte):
brew install jpeg
sudo mkdir -p /usr/local/include /usr/local/lib
JPEG_PREFIX="$(brew --prefix jpeg)"
sudo ln -sf "$JPEG_PREFIX/include/jpeglib.h" /usr/local/include/jpeglib.h
sudo ln -sf "$JPEG_PREFIX/include/jmorecfg.h" /usr/local/include/jmorecfg.h
sudo ln -sf "$JPEG_PREFIX/include/jerror.h" /usr/local/include/jerror.h
[ -f "$JPEG_PREFIX/include/jconfig.h" ] && sudo ln -sf "$JPEG_PREFIX/include/jconfig.h" /usr/local/include/jconfig.h
sudo ln -sf "$JPEG_PREFIX/lib/libjpeg.dylib" /usr/local/lib/libjpeg.dylib
sudo ln -sf "$JPEG_PREFIX/lib/libjpeg.a" /usr/local/lib/libjpeg.a
Wenn cpanm die Meldung in Richtung
„Using system's -ljpeg“ zeigt, wird der
problematische JPEG-Unterbuild übersprungen.
Variante B: Vor dem Build aggressive
Umgebungsvariablen entfernen, die ein altes
configure verwirren:
unset CPPFLAGS LDFLAGS CFLAGS CXXFLAGS
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
cpanm Tk
Tcl/Tk-Bibliotheken (optional)
Für die eigentliche Tk-GUI nutzt Perl/Tk eigene Quellen; auf dem Mac kann zusätzlich tcl-tk von Homebrew helfen, wenn Header/Libs gesucht werden:
brew install tcl-tk
Bei Bedarf vor dem CPAN-Build (Beispiel, Pfade an Ihre
brew --prefix tcl-tk anpassen):
TCL_PREFIX="$(brew --prefix tcl-tk)"
export PATH="$TCL_PREFIX/bin:$PATH"
export PKG_CONFIG_PATH="$TCL_PREFIX/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
Modul installieren und testen
cpanm Tk
perl -MTk -e 'print "Tk ok\n"'
Minimalbeispiel (Fenster mit Text und Beenden-Button) finden Sie
z. B. im Projekt als hello_world_tk.pl.
wish ist unabhängig vom CPAN-Modul Tk.