ndk-buildを使用してAndroid x64用のコードをビルドすると、次のコードはvec2(vec.size())でクラッシュします( x86は正常に動作しました)。
こんにちは.cpp
#include <vector>
#include <stdio.h>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> vec;
vec.push_back(11);
vec.clear();
vector<int> vec2(vec.size());
return 0;
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp
include $(BUILD_EXECUTABLE)
アプリケーション.mk
APP_ABI := x86_64
APP_STL := stlport_static
それは変だね。vec.size()の値は0 です。次のようにコードを変更すると:
vector<int> vec2(0);
アプリはクラッシュしません。この問題は、コンパイラの最適化が原因のようです。CFLAG -O2 がデフォルトで使用されます。その後に -O0 などの別の CFLAG を追加しても、アプリはクラッシュしません。
理由を知っている人はいますか?
ありがとう!