{"id":97,"date":"2026-07-19T13:08:14","date_gmt":"2026-07-19T13:08:14","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/2026\/07\/19\/crosscompile-for-macos-on-ubuntu-cmake\/"},"modified":"2026-07-19T13:08:14","modified_gmt":"2026-07-19T13:08:14","slug":"crosscompile-for-macos-on-ubuntu-cmake","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2026\/07\/19\/crosscompile-for-macos-on-ubuntu-cmake\/","title":{"rendered":"Erstellen von macOS-Anwendungen f\u00fcr Ubuntu OSXCross CMake"},"content":{"rendered":"<p>In diesem Beitrag beschreibe ich die Erstellung plattform\u00fcbergreifender C++-Anwendungen f\u00fcr macOS auf einer Ubuntu-Build-Maschine mit CMake und osxcross.<br \/>\nInstallieren Sie zun\u00e4chst die osxcross-Toolchain:<br \/>\n<a href=\"https:\/\/github.com\/tpoechtrager\/osxcross\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tpoechtrager\/osxcross<\/a><br \/>\nDie Installation erfolgt in drei Phasen, wobei Abh\u00e4ngigkeiten heruntergeladen werden:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>cd tools\n.\/get_dependencies.sh\n<\/code><\/pre>\n<\/div>\n<p>Laden Sie XCode.xip von der offiziellen Apple-Website herunter und laden Sie dann das SDK von XCode herunter:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>.\/gen_sdk_package_pbzx.sh \/media\/demensdeum\/2CE62A79E62A4404\/LinuxSupportStorage\/xcode111.xip\n<\/code><\/pre>\n<\/div>\n<p>Ich hoffe, Sie haben im letzten Schritt die XCode-Lizenzvereinbarung gelesen? Als n\u00e4chstes erstellen Sie die Toolchain mit dem erforderlichen Pr\u00e4fix:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>INSTALLPREFIX=\/home\/demensdeum\/Apps\/osxcross .\/build.sh \n<\/code><\/pre>\n<\/div>\n<p>Jetzt k\u00f6nnen Sie osxcross aus dem Pr\u00e4fixverzeichnis des vorherigen Schritts verwenden. F\u00fcgen wir ein neues Build-Makro f\u00fcr CMake hinzu und schreiben alles Notwendige:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>if (OSXCROSS)\nSET(CMAKE_SYSTEM_NAME Darwin)\nSET(CMAKE_C_COMPILER o64-clang)\nSET(CMAKE_CXX_COMPILER o64-clang++)\nSET(CMAKE_C_COMPILER_AR x86_64-apple-darwin19-ar)\nSET(CMAKE_CXX_COMPILER_AR x86_64-apple-darwin19-ar)\nSET(CMAKE_LINKER x86_64-apple-darwin19-ld)\nSET(ENV{OSXCROSS_MP_INC} 1)\nendif()\n<\/code><\/pre>\n<\/div>\n<p>Die dynamische Verkn\u00fcpfung war bei mir nicht erfolgreich, daher exportieren wir die Bibliotheken statisch:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>if (OSXCROSS)\nadd_library(FlameSteelCore STATIC ${SOURCE_FILES})\nelse()\n<\/code><\/pre>\n<\/div>\n<p>Als n\u00e4chstes werden Sie m\u00f6glicherweise mit der Tatsache konfrontiert, dass Sie nicht \u00fcber die erforderlichen Bibliotheken f\u00fcr osxcross verf\u00fcgen. Dies ist mir bei der Verwendung von SDL2 aufgefallen. osxcross unterst\u00fctzt vorgefertigte Bibliothekspakete &#8211; Macports. Beispiel: Installation des SDL2-Mixers:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>osxcross-macports -v install libsdl2_mixer\n<\/code><\/pre>\n<\/div>\n<p>Danach k\u00f6nnen Sie wie gewohnt mit dem Erstellen von Bibliotheken\/Anwendungen im cmake-make-Link beginnen. Vergessen Sie nicht, bei Bedarf eine statische Verkn\u00fcpfung von Bibliotheken anzugeben.<\/p>\n<h3>Manuelle Zusammenstellung von Bibliotheken<\/h3>\n<p>Derzeit bin ich auf das Problem der fehlerhaften Archivierung von Bibliotheken beim statischen Linken gesto\u00dfen; Beim Erstellen der endg\u00fcltigen Anwendung erhalte ich die Fehlermeldung:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>file was built for archive which is not the architecture being linked (x86_64)\n<\/code><\/pre>\n<\/div>\n<p>Ganz \u00e4hnlich wie bei <a href=\"https:\/\/github.com\/tpoechtrager\/osxcross\/issues\/11\" rel=\"noopener\" target=\"_blank\">diesem Ticket<\/a> ist es uns gelungen, eine Problemumgehung zu implementieren, die dazu f\u00fchrte, dass der Build korrekt abgeschlossen wurde. Entpacken wir die statische Bibliothek und erstellen sie mit dem osxcross-Archiver neu:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>ar x ..\/libFlameSteelCore.a\nrm ..\/libFlameSteelCore.a\nx86_64-apple-darwin19-ar rcs ..\/libFlameSteelCore.a *.o\n<\/code><\/pre>\n<\/div>\n<p>Eines der Probleme, die ich pers\u00f6nlich sehe, ist au\u00dferdem die fehlende M\u00f6glichkeit, macOS-Anwendungen direkt auf Ubuntu auszuf\u00fchren (zumindest mit einem Teil der Funktionalit\u00e4t). Nat\u00fcrlich gibt es ein Projekt <a href=\"https:\/\/github.com\/darlinghq\/darling\" rel=\"noopener\" target=\"_blank\">Darling<\/a>, aber die Unterst\u00fctzung l\u00e4sst noch zu w\u00fcnschen \u00fcbrig.<\/p>\n<h3>Quellen<\/h3>\n<p><a href=\"https:\/\/github.com\/tpoechtrager\/osxcross\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tpoechtrager\/osxcross<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag beschreibe ich die Erstellung plattform\u00fcbergreifender C++-Anwendungen f\u00fcr macOS auf einer Ubuntu-Build-Maschine mit CMake und osxcross. Installieren Sie zun\u00e4chst die osxcross-Toolchain: https:\/\/github.com\/tpoechtrager\/osxcross Die Installation erfolgt in drei Phasen, wobei Abh\u00e4ngigkeiten heruntergeladen werden: cd tools .\/get_dependencies.sh Laden Sie XCode.xip von der offiziellen Apple-Website herunter und laden Sie dann das SDK von XCode herunter: .\/gen_sdk_package_pbzx.sh [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-97","post","type-post","status-publish","format-standard","hentry","category-notes"],"translation":{"provider":"WPGlobus","version":"3.0.3","language":"de","enabled_languages":["en","ru","zh","de","ja","fr","es","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"es":{"title":false,"content":false,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":true,"content":true,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/97","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=97"}],"version-history":[{"count":0,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}