{"id":2300,"date":"2019-10-27T09:15:13","date_gmt":"2019-10-27T06:15:13","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2300"},"modified":"2024-12-16T22:32:33","modified_gmt":"2024-12-16T19:32:33","slug":"crosscompile-for-macos-on-ubuntu-cmake","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2019\/10\/27\/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 \/>Installieren Sie zun\u00e4chst die osxcross-Toolchain:<br \/><a href=\"https:\/\/github.com\/tpoechtrager\/osxcross\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/tpoechtrager\/osxcross<\/a><br \/>\nDie Installation erfolgt in drei Schritten, wobei Abh\u00e4ngigkeiten heruntergeladen werden:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-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 line-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? Erstellen Sie als N\u00e4chstes die Toolchain mit dem erforderlichen Pr\u00e4fix:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-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 Sie alles Notwendige:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-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 line-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 vielleicht mit der Tatsache konfrontiert, dass Sie nicht \u00fcber die notwendigen Bibliotheken f\u00fcr osxcross verf\u00fcgen. Dies ist mir bei der Verwendung von SDL2 aufgefallen. osxcross unterst\u00fctzt vorgefertigte Bibliothekspakete &#8211; Macports. Beispiel: Installation von SDL2-mixer:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-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 einer fehlerhaften Archivierung von Bibliotheken w\u00e4hrend der statischen Verkn\u00fcpfung gesto\u00dfen. Beim Erstellen der endg\u00fcltigen Anwendung erhalte ich die Fehlermeldung:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-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>Sehr \u00e4hnlich zu <a href=\"https:\/\/github.com\/tpoechtrager\/osxcross\/issues\/11\" rel=\"noopener\" target=\"_blank\">diesem Ticket<\/a> haben wir es geschafft, ein zu implementieren Dies f\u00fchrt zu einer Problemumgehung, die dazu f\u00fchrt, dass die Montage korrekt abgeschlossen wird. Entpacken wir die statische Bibliothek und erstellen sie mit dem osxcross-Archiver neu:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-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>Ich pers\u00f6nlich halte auch die mangelnde M\u00f6glichkeit, macOS-Anwendungen direkt auf Ubuntu auszuf\u00fchren (zumindest mit einigen Funktionen), f\u00fcr eines der Probleme. 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 immer 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 Schritten, 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 \/media\/demensdeum\/2CE62A79E62A4404\/LinuxSupportStorage\/xcode111.xip Ich<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2019\/10\/27\/crosscompile-for-macos-on-ubuntu-cmake\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Erstellen von macOS-Anwendungen f\u00fcr Ubuntu OSXCross CMake&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[126],"class_list":["post-2300","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-osxcross","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt"],"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},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2300","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=2300"}],"version-history":[{"count":20,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2300\/revisions"}],"predecessor-version":[{"id":3936,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2300\/revisions\/3936"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=2300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=2300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=2300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}