C++標準ライブラリの種類と選び方:Androidアプリ開発におけるANDROID_STL_TYPE

2024-04-02

CMake の "Properties: Targets" における "ANDROID_STL_TYPE" の詳細解説

"ANDROID_STL_TYPE" は、CMake で Android アプリケーションをビルドする際に、C++ 標準ライブラリ (STL) の種類を指定するために使用するターゲットプロパティです。これは "Properties: Targets" セクションで設定できます。

設定可能な値

"ANDROID_STL_TYPE" は以下のいずれかの値に設定できます:

  • none: C++ サポートなし
  • system: 最小限の C++ (STL なし)
  • gabi++_static: GAbi++ 静的
  • gabi++_shared: GAbi++ 共有
  • gnustl_static: GNU libstdc++ 静的
  • c++_static: LLVM libc++ 静的
  • c++_shared: LLVM libc++ 共有
  • stlport_static: STLport 静的
  • stlport_shared: STLport 共有

デフォルト値は以下の通りです:

  • NDK が gnustl_static を提供する場合は gnustl_static
  • それ以外の場合は c++_static

各設定の詳細

  • none: C++ コードはビルドされません。
  • system: 最小限の C++ ランタイムのみが提供されます。STL は使用できません。
  • gabi++_static: GAbi++ 静的ライブラリを使用します。
  • gnustl_static: GNU libstdc++ 静的ライブラリを使用します。
  • c++_static: LLVM libc++ 静的ライブラリを使用します。
  • stlport_static: STLport 静的ライブラリを使用します。

注意事項

  • 設定する値は、NDK がサポートするものである必要があります。
  • 共有ライブラリを使用する場合は、アプリケーション APK にライブラリを含める必要があります。
  • 静的ライブラリを使用する場合は、アプリケーション APK はライブラリに依存します。

補足

  • "ANDROID_STL_TYPE" は、Android アプリケーションのビルドに影響を与える重要なプロパティです。
  • 適切な値を選択するには、アプリケーションの要件と NDK のサポート状況を考慮する必要があります。
  • 上記の参考資料は、"ANDROID_STL_TYPE" の設定に関する詳細情報を提供します。
  • ご不明な点があれば、お気軽にご質問ください。


Android アプリケーションにおける "ANDROID_STL_TYPE" のサンプルコード

CMakeLists.txt

cmake_minimum_required(VERSION 3.14)

set(CMAKE_CXX_STANDARD 11)

project(MyApp)

add_library(mylib SHARED
        src/mylib.cpp)

target_link_libraries(mylib
        android)

add_executable(myapp
        src/myapp.cpp)

target_link_libraries(myapp
        mylib
        android)

set_target_properties(myapp
        PROPERTIES
        ANDROID_STL_TYPE "c++_static")

src/mylib.cpp

#include <iostream>

int main() {
        std::cout << "Hello from mylib!" << std::endl;
        return 0;
}

src/myapp.cpp

#include <iostream>

#include "mylib.h"

int main() {
        std::cout << "Hello from myapp!" << std::endl;
        mylib_function();
        return 0;
}

このサンプルコードでは、"ANDROID_STL_TYPE" プロパティを "c++_static" に設定しています。これは、アプリケーションが LLVM libc++ 静的ライブラリを使用することを意味します。

その他のサンプルコード

  • "gnustl_shared" を使用する場合は、以下のようになります:
set_target_properties(myapp
        PROPERTIES
        ANDROID_STL_TYPE "gnustl_shared")
  • "none" を使用する場合は、以下のようになります:
set_target_properties(myapp
        PROPERTIES
        ANDROID_STL_TYPE "none")

注意事項

  • 上記のサンプルコードは、あくまでも参考として使用してください。
  • アプリケーションの要件に合わせて、コードを変更する必要があります。


"ANDROID_STL_TYPE" を設定するその他の方法

方法 1: コマンドライン

以下のコマンドを使用して、cmake コマンドラインから "ANDROID_STL_TYPE" プロパティを設定できます:

cmake -DANDROID_STL_TYPE=c++_static ..

このコマンドは、"ANDROID_STL_TYPE" プロパティを "c++_static" に設定します。

方法 2: IDE

多くの IDE は、CMake プロパティを設定するための GUI を提供しています。これらの IDE では、通常、プロジェクト設定で "ANDROID_STL_TYPE" プロパティを見つけることができます。

方法 3: 環境変数

以下の環境変数を設定して、"ANDROID_STL_TYPE" プロパティのデフォルト値を設定できます:

CMAKE_ANDROID_STL_TYPE=c++_static

この環境変数を設定すると、cmake コマンドラインまたは IDE で "ANDROID_STL_TYPE" プロパティを明示的に設定しなくても、すべてのターゲットに対して "c++_static" 値が使用されます。

注意事項

  • コマンドラインまたは IDE を使用して "ANDROID_STL_TYPE" プロパティを設定すると、CMakeLists.txt ファイルで設定した値よりも優先されます。
  • 環境変数を設定すると、コマンドラインまたは IDE で設定した値よりも優先されます。



CMakeの"Commands"における"fltk_wrap_ui()"プログラミングを徹底解説!

この解説では、CMakeの"Commands"における"fltk_wrap_ui()"プログラミングについて、分かりやすく説明します。"fltk_wrap_ui()"は、CMakeでFLTK GUIアプリケーションをビルドするために使用されるマクロです。このマクロは、FLTK GUI定義ファイルをC++コードに変換し、プロジェクトに組み込みます。



CMake find_libraryコマンドとfind_packageモジュールの比較

find_library() コマンドは、CMake で外部ライブラリを見つけるために使用されます。これは、プロジェクトに必要なライブラリを自動的に検出して、ビルドプロセスを簡略化するのに役立ちます。コマンドフォーマット<VAR>: 検索結果を格納する変数名


CMakeのCommandsにおけるuse_mangled_mesa()

use_mangled_mesa() は CMake の Commands における関数で、Mesa ライブラリの mangled シンボル名を解決するために使用されます。Mesa は OpenGL の実装であり、古いバージョンの Mesa ではシンボル名が mangled されるため、use_mangled_mesa() を使用してこれらのシンボル名を解決する必要があります。


C++標準ライブラリ、テンプレートエンジン、シェルスクリプト... string()コマンドの代替方法を徹底比較

CMakeのstring()コマンドは、文字列処理を行うための強力なツールです。C++のstd::stringのような機能に加え、CMake特有の便利な機能も備えています。主な機能文字列の連結、分割、置換、比較大文字・小文字変換部分文字列の抽出


CMake try_compile() を使って特定のライブラリがインストールされているかどうかを確認する方法

try_compile() は、CMake の強力なコマンドの一つで、コードを実際にコンパイルすることなく、コンパイルが成功するかどうかを確認することができます。これは、特定のコンパイラやオプションがシステム上で使用可能かどうかをテストしたり、コードの移植性を検証したりする際に非常に便利です。



CMakeポリシー CMP0044 でソースファイル名の重複を検知する

CMakeポリシー CMP0044 は、CMake 3.13 で導入された新しいポリシーで、target_sources コマンドでソースファイルのリストを指定する際、ファイル名の重複を検知し、警告またはエラーを出力する機能を提供します。このポリシーは、プロジェクト内のソースファイル管理をより厳格にし、ビルドエラーを防ぐために役立ちます。


【初心者向け解説】CMake の "Variables" に関連する "CMAKE_XCODE_BUILD_SYSTEM" のプログラミング

CMake は、クロスプラットフォームなビルドシステムを構築するためのオープンソースのツールです。Xcode は、Apple の macOS と iOS 向けの統合開発環境 (IDE) です。CMake の CMAKE_XCODE_BUILD_SYSTEM 変数は、Xcode を使用して CMake プロジェクトをビルドするように指示するために使用されます。


CMakeの add_imported_target と target_link_libraries コマンドを徹底解説

IMPORTED_NO_SYSTEM プロパティは、CMake において インポートされたターゲット が システムライブラリ でないことを指定するために使用されます。これは、ターゲットがシステムにデフォルトでインストールされているライブラリではなく、プロジェクト固有のライブラリであることを示します。


CMake初心者でも安心:VS_KEYWORDでVisual Studioプロジェクト設定を楽々マスター

CMakeの"Properties: Targets"におけるVS_KEYWORDは、Visual Studioプロジェクトファイル生成時にターゲットに関連する属性を設定するためのマクロです。これらの属性は、プロジェクトの設定や動作に影響を与えます。


FindwxWindowsモジュールでwxWidgetsを簡単に使う

FindwxWindows は、CMake のモジュールの一つで、wxWidgets ライブラリをプロジェクトに簡単に統合するために使用されます。wxWidgets は、クロスプラットフォームの GUI ツールキットであり、Windows、Mac OS X、Linux などの様々なプラットフォームで動作する GUI アプリケーション開発を可能にします。