मैं android-ndk-r8b
के साथ इस साधारण प्रोग्राम को संकलित करने के कोशिश कर रहा हूँ:
JNI/hello_jni.cppAndroid NDK में C++ 0x थ्रेड का उपयोग कैसे करें?
#include <iostream>
#include <thread>
void hello()
{
std::cout << "Hi i'm a thread!!!" << std::endl;
}
int main()
{
std::thread th(hello);
th.join();
return 0;
}
JNI/Application.mk
APP_OPTIM := release
APP_MODULES := hello_thread
APP_STL := gnustl_static
JNI/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CPPFLAGS += -std=c++0x -frtti
LOCAL_MODULE := hello_thread
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -pthread
LOCAL_SRC_FILES := hello_thread.cpp
include $(BUILD_EXECUTABLE)
ndk-build मुझे एक त्रुटि arguin देता है कि 'थ्रेड' 'std' का सदस्य नहीं है। मैं जारी NDK-निर्माण -n संकलन आदेश हो और मेरी खोल में इसे अकेले जारी करने के लिए:
/home/evigier/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -MMD -MP -MF /home/evigier/eclipse_workspace/hello_thread/obj/local/armeabi/objs/hello_thread/hello_thread.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I/home/evigier/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include -I/home/evigier/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include -I/home/evigier/eclipse_workspace/hello_thread/jni -DANDROID -Wa,--noexecstack -std=c++0x -frtti -O2 -DNDEBUG -g -I/home/evigier/android-ndk-r8b/platforms/android-14/arch-arm/usr/include -c /home/evigier/eclipse_workspace/hello_thread/jni/hello_thread.cpp -o /home/evigier/eclipse_workspace/hello_thread/obj/local/armeabi/objs/hello_thread/hello_thread.o
Compile++ thumb : hello_thread <= hello_thread.cpp
In file included from /home/evigier/android-ndk-r8b/platforms/android-14/arch-arm/usr/include/stdio.h:55:0,
from /home/evigier/android-ndk-r8b/platforms/android-14/arch-arm/usr/include/wchar.h:33,
from /home/evigier/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/cwchar:46,
from /home/evigier/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/postypes.h:42,
from /home/evigier/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/iosfwd:42,
from /home/evigier/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/ios:39,
from /home/evigier/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/ostream:40,
from /home/evigier/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/iostream:40,
from jni/hello_thread.cpp:4:
/home/evigier/android-ndk-r8b/platforms/android-14/arch-arm/usr/include/sys/types.h:124:9: error: 'uint64_t' does not name a type
/home/evigier/eclipse_workspace/hello_thread/jni/hello_thread.cpp: In function 'int main()':
/home/evigier/eclipse_workspace/hello_thread/jni/hello_thread.cpp:14:5: error: 'thread' is not a member of 'std'
/home/evigier/eclipse_workspace/hello_thread/jni/hello_thread.cpp:14:17: error: expected ';' before 'th'
/home/evigier/eclipse_workspace/hello_thread/jni/hello_thread.cpp:15:5: error: 'th' was not declared in this scope
मैं POSIX धागे और सी ++ धागे के बारे में धागे/ढेर सारे प्रश्न पढ़ा है, लेकिन अभी भी नहीं मिल सकता है मेरी जवाब। मेरे arm-linux-androideabi/include/c++/4.6/thread
फ़ाइल केवल std
में class thread
परिभाषित करता है:
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
वे (C++ config.h) अपना SDK में परिभाषित किया जा करने के लिए नहीं है। लेकिन मैं उन्हें सुरक्षित रूप से कैसे चालू कर सकता हूं? क्या मुझे अपने स्वयं के टूलचेन को (गैर-पी) धागे का उपयोग करने की आवश्यकता है? मेरे मेजबान कंप्यूटर है:
Linux evigier-ThinkPad-X220 3.0.0-17-generiC#30-Ubuntu SMP Thu Mar 8 20:45:39 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
धन्यवाद सर्गेई। एंड्रॉइड लोक ने एनडीके में/सी ++/4.6/थ्रेड हेडर फ़ाइल क्यों डाली? के बिना एंड्रॉइड में एनडीके के साथ आप कुछ मल्टीथ्रेडिंग सामग्री कैसे करते हैं? क्या आप पॉज़िक्स धागे का उपयोग करते हैं? –
मैं एंड्रॉइड में पॉज़िक्स धागे का उपयोग करता हूं। वे ठीक काम करते हैं। मुझे 4.6 टूलचेन में नए शीर्षकों के बारे में कोई जानकारी नहीं है। –
ठीक है धन्यवाद। @ commoncpp @ वर्ग थ्रेड प्रदान करता है, मैं कोशिश करूँगा। –