この投稿では、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
また、私が個人的に考えている問題の 1 つは、Ubuntu 上で macOS アプリケーションを直接実行する機能 (少なくとも一部の機能) が欠如していることです。もちろん、darling というプロジェクトはありますが、サポートにはまだ不十分な点が多くあります。
Leave a Reply