質問

Android NDKを使用していますが、現在STLをサポートしていないため、これで成功した優秀な人がいるか、Androidプラットフォームに適しているかを知りたいと思いました。 :uSTLまたはSTLPort。

編集: 別のオプションは CrystaX .NET のように見えます。

ウェブサイトから:

  

... Androidのカスタマイズされた配布   再構築したNDK r3   公式ソース。 C ++のサポート   例外、RTTIおよび標準C ++   ライブラリが追加されました。

役に立ちましたか?

解決

STLportは現在Android2.3以降でサポートされています!!!

他のヒント

STLのポートは、正式にバージョンr5以降のAndroid NDKで使用可能です。 静的ライブラリまたは共有ライブラリとして使用できます。次の実装は、NDKで事前に構築されています。

  • STLport 、v5.2.0に基づいて:
    • static stlport_static :プロジェクトに動的ライブラリが1つしかない場合に使用します。
    • dynamic stlport_shared :プロジェクトに複数の動的ライブラリがある場合に使用します。
  • GNU libstdc ++ system (静的ライブラリ)

ビルド時に推奨される簡単な使用方法は、次のようにApplication.mkでAPP_STLを定義することです:

APP_STL := stlport_static

そして再構築したい場合(これは不要必要です)、Application.mkでSTLPORT_FORCE_REBUILDを定義します:

STLPORT_FORCE_REBUILD := true

STLportの単体テストフレームワークも利用できます。

STLportの現在の制限

  • C ++例外はサポートされていません
  • RTTIはサポートされていません
  • "考えられるバグ" wchar_t およびロケール
  • のサポート

さまざまなリンク:

ドキュメントは、次の場所にあるNDKパッケージで入手できます(他にもある場合があります):

  • docsCPLUSPLUS-SUPPORT.html
  • sources / cxx-stl / stlport
  • sources / cxx-stl / gnu-libstdc ++

NDK +ドキュメントのダウンロードこちら;ファイルバグこちら


以下はdocs / CPLUSPLUS-SUPPORT.html(NDK docs、r5)からの抜粋です

III。 C ++標準ライブラリの実装の選択:

デフォルトでは、最小限のC ++ランタイムシステムのヘッダーとライブラリ ライブラリ(/system/lib/libstdc++.so)は、C ++ソースをビルドするときに使用されます。

ただし、変数を設定することで別の実装を選択できます APP.STLをApplication.mk内の他の何かに、たとえば:

APP_STL:= stlport_static

このNDKで提供される静的STLport実装を選択します。 値APP_STLの値は次のとおりです。

システム->デフォルトの最小限のC ++ランタイムライブラリを使用します。    stlport_static->静的ライブラリとしてビルドされたSTLportを使用します。    stlport_shared->共有ライブラリとしてビルドされたSTLportを使用します。

警告:重要な注意事項

 AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS
 AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
 MODULES THAT USE IT.

警告:重要な警告の終わり

" stlport_shared"に複数の共有ライブラリがある場合に推奨されます   関数の重複を避けるため、C ++ STLを使用するプロジェクト   さらに重要なのは、各変数のグローバル変数(std :: coutなど)   それらは驚くべき結果をもたらします。

一方、起動時には明示的にロードする必要があります   次の例のようなアプリケーション:

 static {
     System.loadLibrary("stlport_shared");
     System.loadLibrary("foo");
     System.loadLibrary("bar");
 }

両方の" libfoo.so"および「libbar.so」 " libstlport_shared.so"に依存します。

" libstlport_shared.so"の場合、共有ライブラリの名前に注意してください。避けるために   を含む特定のAndroidシステムイメージと名前の競合   システムレベルのlibstlport.so(たまたまABIで安定していない   NDKで生成されたマシンコードからは使用できません)。

" stlport_static"共有ライブラリが1つしかない場合に推奨されます   プロジェクト:実際に必要なSTL関数と変数のみが   マシンコードにリンクされ、コードサイズが削減され、必要ありません   起動時に動的stlport_sharedをロードします。

IV。 STLport固有の問題:

このNDKは、STLport用のビルド済みの静的および共有ライブラリを提供します。 ただし、以下を定義することにより、ソースから強制的に再構築できます。 ビルドする前に、環境またはApplication.mkで:

<*>

STLportは、

uSTLは標準からかなり逸脱していることに注意してください。たとえば、std :: stringのUTF-8エンコーディングを想定しています。それでも面白いように見えます...

最近、ジョン・リプリーによる Android向けのヘルパースクリプトとSTLportのポートに出会いました。

関連するブログ投稿もあります設定方法の手順

それにより、STLportを使いやすくすることができると思います。

これは、Android Froyoで動作するようにSTLPortを構成した方法です。

// The code
// The set of definitions and includes for STLPort
// They used defined() instead of #ifdef.
#define _STLP_HAS_INCLUDE_NEXT  1
#define _STLP_USE_MALLOC   1
#define _STLP_USE_NO_IOSTREAMS  1
#include <stl/config/_android.h>
#include <map>
#include <string>

// Android.mk
# For Android STL support
LOCAL_C_INCLUDES += external/stlport/stlport
LOCAL_SHARED_LIBRARIES += libstlport

アンドリュー

Stjepan Rajkoの回答からのリンクにあるgitリポジトリの言及はもはや存在しないことに注意してください。代替ソースは anddev にあり、git経由ではgit:// stlportにあります。 .git.sourceforge.net / gitroot / stlport / stlport。後者は Androidでのstlportとboostの両方の使用に関する長い議論

この質問に最初に答えてから、anddev STLPortを、問題のあるshared_ptrを含め、boostを呼び出すライブラリと連携するようになりました。私のソリューションの詳細については、この質問

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top