3

かなり複雑なプログラムを使用して、NDK でおかしなエラーが発生し始めます。

#include <stdio.h>
#include <iostream>

int main( int argc, char **argv ) {
    return 0;
}


>call c:\android-ndk-r9\ndk-build.cmd
"Compile++ thumb : test <= test.cpp
In file included from C:/workspace/c++11_test//jni/test.cpp:11:
In file included from c:/android-ndk-r9/sources/cxx-stl/stlport/stlport\iostream:43:
In file included from c:/android-ndk-r9/sources/cxx-stl/stlport/stlport\stl/_istream.h:31:
In file included from c:/android-ndk-r9/sources/cxx-stl/stlport/stlport\stl/_ostream.h:380:
In file included from c:/android-ndk-r9/sources/cxx-stl/stlport/stlport\stl/_ostream.c:26:
In file included from c:/android-ndk-r9/sources/cxx-stl/stlport/stlport\stl/_num_put.h:180:
In file included from c:/android-ndk-r9/sources/cxx-stl/stlport/stlport\stl/_num_put.c:26:
c:/android-ndk-r9/sources/cxx-stl/stlport/stlport\stl/_limits.h:217:48: error: non-type template argument evaluates to -2147483648, which cannot be narrowed to type 'wchar_t'
      [-Wc++11-narrowing]
  : public _STLP_PRIV _Integer_limits<wchar_t, WCHAR_MIN, WCHAR_MAX, -1, true>
                                               ^
c:/android-ndk-r9/platforms/android-14/arch-arm/usr/include\../include/wchar.h:76:22: note: expanded from macro 'WCHAR_MIN'
#define  WCHAR_MIN   INT_MIN
                     ^
c:/android-ndk-r9/platforms/android-14/arch-arm/usr/include\sys/limits.h:69:18: note: expanded from macro 'INT_MIN'
#define INT_MIN         (-0x7fffffff-1) /* min value for an int */
                        ^
1 error generated.

make: * [C:/workspace/c++11_test//obj/local/armeabi/objs/test/test.o] エラー 1

ndk-r9です。4.8は問題なく準拠していますが、 clangだけがつまずきます。clang を機能させるために何かを定義する必要がありますか? 私はGoogleエラーを試しましたが、関連するものは何もありません...明らかに、 -Wno-c++11-narrowingでオフにすることができますが、絞り込みチェックを無効にしたくありません。

そして、それは stlport_static でのみ表示され、gnustl_staticではエラーはありません

4

1 に答える 1

0

この警告が表示されているため、C++11 が有効になっているようです。

C++11 の STLport サポートはあまり良くありません。これがあなたの苦しみの理由だと思います。

修正するには、STLport を変更するか、clang コマンドラインから「-std=c++11」スイッチを削除する必要があります。

私見ですが、gnustl (aka. libstdc++) に切り替えることをお勧めします。ただし、他の理由でそうすることを妨げる場合を除きます (ライセンス: libstdc++ はGPL3 であり、clang に対して有効である場合と有効でない場合があるいくつかの重要な例外があります。 )、従来のサポート、サイズなど)。私はそれについて非常に良い経験をしました。

于 2013-09-03T08:54:42.390 に答える