2013-07-12 28 views
6

Tôi đã cố gắng lấy mã mẫu làm việc sau để biết liệu lập trình không đồng bộ có đang hoạt động trong NDK của Android hay không. Mặc dù NDK có STL <future> được công nhận là tiêu đề, nhưng không nhận được thông báo std::async. Mã Tôi cố gắng để sử dụng là như sau:C++ 11 std :: không đồng bộ trong Android NDK không hoạt động

#include <future> 
#include <iostream> 

struct Foo 
{ 
    Foo() : data(0) {} 
    void sum(int i) { data +=i;} 
    int data; 
}; 

int main() 
{ 
    Foo foo; 
    auto f = std::async(&Foo::sum, &foo, 42); 
    f.get(); 
    std::cout << foo.data << "\n"; 
} 

Ngoài ra tất cả các bao gồm đường dẫn đã được thiết lập vào thư mục quy định dưới Properties-> Paths và biểu tượng

Errors 
Description Resource Path Location Type 
invalid use of incomplete type 'std::__async_sfinae_helper<void (Foo::*)(int), void (Foo::*)(int), Foo*, int>::type {aka struct std::future<void>}' Sample.cpp /Project12/jni line 50 C/C++ Problem 

Description Resource Path Location Type 
declaration of 'std::__async_sfinae_helper<void (Foo::*)(int), void (Foo::*)(int), Foo*, int>::type {aka struct std::future<void>}' Project12  line 111, external location: D:\android-ndk-r8e-windows-x86_64\android-ndk-r8e\sources\cxx-stl\gnu-libstdc++\4.6\include\future C/C++ Problem 

Trả lời

9

curently Android NDK không kết hợp tất cả tính năng C++ 11. Trình biên dịch Clang 3.3 từ NDK r9b là C++ 11 tính năng hoàn chỉnh, tuy nhiên, STLstdlib trên Android thì không.

Để sử dụng tính năng C++11 gần đây nhất được thiết lập trong Android, hãy sử dụng trình biên dịch Clang 3.3 từ Android NDK r9b. Đặt dòng này vào Application.mk tập tin của bạn:

NDK_TOOLCHAIN_VERSION := clang 

Ngoài ra, thêm -std=c++11 chuyển sang LOCAL_CPPFLAGS biến:

LOCAL_CPPFLAGS += -std=c++11 
+0

vẫn tôi không nhận được nó ... Trong thực tế tôi không thể sử dụng ngay cả những enum được định nghĩa trong .... Có phải là vấn đề với Eclipse hay ndk hoặc thư viện mà tôi không biết – user2508941

+1

Đây là vấn đề với NDK. Chỉ cần chờ cập nhật. Clang 3.3 và stdlib mới sẽ có mặt ở đó một ngày. –

+2

@ user2508941 NDK r9 đã hết, với clang 3.3. – Samveen

Các vấn đề liên quan