{"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\/fr\/2019\/10\/27\/crosscompile-for-macos-on-ubuntu-cmake\/","title":{"rendered":"Cr\u00e9ation d&#8217;applications macOS pour Ubuntu OSXCross CMake"},"content":{"rendered":"<p>Dans cet article, je d\u00e9crirai la cr\u00e9ation d&#8217;applications C++ multiplateformes pour macOS sur une machine de build Ubuntu \u00e0 l&#8217;aide de CMake et osxcross.<br \/>Tout d&#8217;abord, installez la cha\u00eene d&#8217;outils osxcross\u00a0:<br \/><a href=\"https:\/\/github.com\/tpoechtrager\/osxcross\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/tpoechtrager\/osxcross<\/a><br \/>\nL&#8217;installation se d\u00e9roule en 3 \u00e9tapes, t\u00e9l\u00e9chargement des d\u00e9pendances\u00a0:<\/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>T\u00e9l\u00e9chargez XCode.xip depuis le site officiel d&#8217;Apple, puis t\u00e9l\u00e9chargez le SDK depuis XCode\u00a0:<\/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>J&#8217;esp\u00e8re que vous avez lu le contrat de licence XCode lors de la derni\u00e8re \u00e9tape\u00a0? Ensuite, cr\u00e9ez la cha\u00eene d&#8217;outils avec le pr\u00e9fixe requis\u00a0:<\/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>Vous pouvez maintenant utiliser osxcross \u00e0 partir du r\u00e9pertoire de pr\u00e9fixes de l&#8217;\u00e9tape pr\u00e9c\u00e9dente. Ajoutons une nouvelle macro de build pour CMake, \u00e9crivons tout ce qui est n\u00e9cessaire\u00a0:<\/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>La liaison dynamique n&#8217;a pas fonctionn\u00e9 pour moi, nous exportons donc les biblioth\u00e8ques de mani\u00e8re statique\u00a0:<\/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>Ensuite, vous pourriez \u00eatre confront\u00e9 au fait que vous ne disposez pas des biblioth\u00e8ques n\u00e9cessaires pour osxcross, j&#8217;ai rencontr\u00e9 ce probl\u00e8me lors de l&#8217;utilisation de SDL2. osxcross prend en charge les packages de biblioth\u00e8ques pr\u00eats \u00e0 l&#8217;emploi &#8211; macports. Par exemple, en installant SDL2-mixer\u00a0:<\/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>Apr\u00e8s cela, vous pouvez commencer \u00e0 cr\u00e9er des biblioth\u00e8ques\/applications comme d&#8217;habitude dans le lien cmake-make, n&#8217;oubliez pas de sp\u00e9cifier des liens statiques de biblioth\u00e8ques si n\u00e9cessaire.<\/p>\n<h3>Assemblage manuel des biblioth\u00e8ques<\/h3>\n<p>Actuellement, j&#8217;ai rencontr\u00e9 le probl\u00e8me d&#8217;un archivage incorrect des biblioth\u00e8ques lors de la liaison statique\u00a0; lors de la construction de l&#8217;application finale, je re\u00e7ois l&#8217;erreur\u00a0:<\/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>Tr\u00e8s similaire \u00e0 <a href=\"https:\/\/github.com\/tpoechtrager\/osxcross\/issues\/11\" rel=\"noopener\" target=\"_blank\">ce ticket<\/a>, nous avons r\u00e9ussi \u00e0 impl\u00e9menter un solution de contournement qui permet \u00e0 l&#8217;assemblage de se terminer correctement. D\u00e9compressons la biblioth\u00e8que statique et recr\u00e9ons-la \u00e0 l&#8217;aide de l&#8217;archiveur osxcross\u00a0:<\/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>Personnellement, je consid\u00e8re aussi que l&#8217;un des probl\u00e8mes est le manque de possibilit\u00e9 d&#8217;ex\u00e9cuter des applications macOS directement sur Ubuntu (au moins avec certaines fonctionnalit\u00e9s). Bien s\u00fbr, il existe un projet <a href=\"https:\/\/github.com \/darlinghq\/darling\" rel=\"noopener\" target=\"_blank\">darling<\/a>, mais le support laisse encore beaucoup \u00e0 d\u00e9sirer.<\/p>\n<h3>Sources<\/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>Dans cet article, je d\u00e9crirai la cr\u00e9ation d&#8217;applications C++ multiplateformes pour macOS sur une machine de build Ubuntu \u00e0 l&#8217;aide de CMake et osxcross.Tout d&#8217;abord, installez la cha\u00eene d&#8217;outils osxcross\u00a0:https:\/\/github.com\/tpoechtrager\/osxcross L&#8217;installation se d\u00e9roule en 3 \u00e9tapes, t\u00e9l\u00e9chargement des d\u00e9pendances\u00a0: cd tools .\/get_dependencies.sh T\u00e9l\u00e9chargez XCode.xip depuis le site officiel d&#8217;Apple, puis t\u00e9l\u00e9chargez le SDK depuis XCode\u00a0:<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2019\/10\/27\/crosscompile-for-macos-on-ubuntu-cmake\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Cr\u00e9ation d&#8217;applications macOS pour 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":"fr","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\/fr\/wp-json\/wp\/v2\/posts\/2300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=2300"}],"version-history":[{"count":20,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2300\/revisions"}],"predecessor-version":[{"id":3936,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2300\/revisions\/3936"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=2300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=2300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=2300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}