この投稿では、CMake と osxcross を使用して、Ubuntu ビルド マシン上で macOS 用のクロスプラットフォーム C++ アプリケーションを構築する方法について説明します。
まず、osxcross ツールチェーンをインストールします。
https://github.com/tpoechtrager/osxcross
インストールは 3 段階で行われ、依存関係をダウンロードします。
cd tools
./get_dependencies.sh
Apple 公式 Web サイトから XCode.xip をダウンロードし、XCode から SDK をダウンロードします。
./gen_sdk_package_pbzx.sh /media/demensdeum/2CE62A79E62A4404/LinuxSupportStorage/xcode111.xip
最後のステップで XCode 使用許諾契約を読んでいただければ幸いです。次に、必要なプレフィックスを使用してツールチェーンを構築します。
INSTALLPREFIX=/home/demensdeum/Apps/osxcross ./build.sh
これで、前の手順のプレフィックス ディレクトリから osxcross を使用できるようになります。 CMake の新しいビルド マクロを追加して、必要なものをすべて記述してみましょう。
if (OSXCROSS)
SET(CMAKE_SYSTEM_NAME Darwin)
SET(CMAKE_C_COMPILER o64-clang)
SET(CMAKE_CXX_COMPILER o64-clang++)
SET(CMAKE_C_COMPILER_AR x86_64-apple-darwin19-ar)
SET(CMAKE_CXX_COMPILER_AR x86_64-apple-darwin19-ar)
SET(CMAKE_LINKER x86_64-apple-darwin19-ld)
SET(ENV{OSXCROSS_MP_INC} 1)
endif()
動的リンクが成功しなかったため、ライブラリを静的にエクスポートします。
if (OSXCROSS)
add_library(FlameSteelCore STATIC ${SOURCE_FILES})
else()
次に、osxcross に必要なライブラリがないという事実に直面するかもしれません。私は SDL2 を使用しているときにこれに遭遇しました。 osxcross は既製のライブラリ パッケージをサポートしています –マックポート。たとえば、SDL2-mixer をインストールする場合は次のようになります。
osxcross-macports -v install libsdl2_mixer
この後、cmake-make リンクで通常どおりライブラリ/アプリケーションの構築を開始できます。必要に応じてライブラリの静的リンクを指定することを忘れないでください。
ライブラリの手動アセンブリ
現在、最終的なアプリケーションを構築するときに、静的リンク中にライブラリが正しくアーカイブされないという問題が発生し、次のエラーが発生します。
file was built for archive which is not the architecture being linked (x86_64)
このチケットと非常によく似た、回避策を実行すると、アセンブリが正しく完了します。静的ライブラリを解凍し、osxcross アーカイバを使用して新たにビルドしましょう。
ar x ../libFlameSteelCore.a
rm ../libFlameSteelCore.a
x86_64-apple-darwin19-ar rcs ../libFlameSteelCore.a *.o
私は個人的に、macOS アプリケーションを Ubuntu 上で直接実行する機能 (少なくとも一部の機能) が欠如していることも問題の 1 つであると考えています。もちろん、プロジェクトがあります ダーリンですが、サポートにはまだ改善の余地がたくさんあります。
ソース
https://github.com/tpoechtrager/osxcross