【发布时间】:2016-06-08 09:47:51
【问题描述】:
如果我使用 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。如果我在其后添加另一个 CFLAG,例如 -O0,应用程序也不会崩溃。
有人知道为什么吗?
谢谢!
【问题讨论】:
标签: android vector stl android-ndk ndk-build