13

Androidプロジェクト内で共有ポインターを使用する方法がわかりません。私はAndroidNDKr8dを搭載したMacOSXで最新のEclipseADTを使用しています。

これが私のAndroid.mkファイルにあるものです:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CPPFLAGS  := -std=c++11
LOCAL_MODULE    := native
LOCAL_SRC_FILES := native.cpp
include $(BUILD_SHARED_LIBRARY)

これが私のApplication.mkファイルにあるものです:

NDK_TOOLCHAIN_VERSION=4.7
APP_STL := stlport_shared

デフォルトのGCC4.6、実験的な4.7、およびclang3.1ツールチェーンを試しました。とc++ランタイムライブラリ
にリンクしてみました。、、、 を試しました。stlport_sharedgnustl_shared
FLAGS -std=c++11-std=c++0x-std=gnu++11

c ++ 11標準のラムダとオートを使用できるので、C++11フラグが機能しているように見えます。ただし、shared_ptr、weak_ptr、またはunique_ptrを使用しようとすると、エラーが発生します。'suchandsuch_ptr' is not a member of 'std'

#include <memory>cppファイルにがあります。Eclipseは私Unresolved inclusion: <memory>に教えてくれますが、私は同じことを取得し<vector><string>それらはコンパイルされて正常に動作しているように見えます。

Android NDKに含まれているツールチェーンにスマートポインターが実装されていませんか?
そうでない場合は、なぜですか?GCCとclangはかなり前からスマートポインターをサポートしていたので、これは私が何かを見逃しているか、Android開発者が何らかの理由でそれらを無効にしていることを意味します。
手がかりはありますか?

4

2 に答える 2

7

標準ライブラリのインクルードパス(など/android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include)がターゲット設定に含まれていることを確認してください。

IDEにGNU標準ライブラリのC++11クラスを認識させるには__GXX_EXPERIMENTAL_CXX0X__、事前定義されたマクロとしてインデクサーに追加します。(C ++ 11が標準化され、サポートが実験的ではなくなったため、名前は少し時代錯誤ですが、まだそれが呼ばれています。)また、インデクサーが正しいビルドターゲットを反映するように設定されていることを確認してください。

于 2013-01-26T03:11:11.807 に答える
4

これらの設定は私のためにそれをしました:

Application.mk:

NDK_TOOLCHAIN_VERSION=4.7
APP_STL := gnustl_static

Android.mk:

LOCAL_CFLAGS :=-D__GXX_EXPERIMENTAL_CXX0X__  <--important
LOCAL_CPPFLAGS  := -std=c++11

Eclipse設定: C / C ++ General\PathおよびSymbolsには以下が含まれている必要があります。

C:\android\ndk\sources\cxx-stl\gnu-libstdc++\4.7\include
C:\android\ndk\sources\cxx-stl\gnu-libstdc++\4.7\libs\armeabi\include
于 2013-09-21T19:30:09.290 に答える