如果我使用ndk-build为Android x64构建代码(x86运行良好) ,以下代码将在vec2(vec.size())处崩溃。
你好.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;
}
安卓.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。如果我在其后添加另一个 CFLAG,例如 -O0,应用程序也不会崩溃。
有人知道为什么吗?
谢谢!