我尝试将兴奋的代码移植到Android设备上,代码使用的是OpenMP技术。我编写了一个演示来验证我的设备是否支持OpenMP。该设备配备Android 6.1系统和ARMv7a架构。
我的演示如下,我使用Android NDK r10d进行编译。演示通常在主线程中运行,但在工作线程(NewThread1)中获得分段错误和核心转储。有什么问题?
我已经在PC设备上编译并运行了这个演示,ererything是可以的!多奇怪啊!
我是OpenMP的初学者,有人可以帮助我吗?
#include <stdio.h>
#include <pthread.h>
#include <omp.h>
void* NewThread1(void* arg)
{
#pragma omp parallel for
//#pragma omp critical
for(int iiii=0;iiii < 4; iiii++) {
int a=11;
int b=22;
int c = a+b;
}
}
int main( int argc, char **argv)
{
#pragma omp parallel
printf( "Hello world!\n");
size_t size = 0;
pthread_t new_thread_id;
printf("Main thread id is %d \n",pthread_self());
if(!pthread_create(&new_thread_id, NULL, NewThread1, NULL))
{
printf("create thread succeed!\n");
}
else
{
printf("Fail to Create Thread");
}
pthread_join(new_thread_id, NULL);
return 0;
}
&#13;
这是我的Android NDK r10d的编译脚本。
SET g++=f:\SoftWare\AndroidNDK\android-ndk-r10d\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-g++.exe
SET CXX_FLAGS=-fPIE -pie -fopenmp
SET SYSROOT=f:\SoftWare\AndroidNDK\android-ndk-r10d\platforms\android-17\arch-arm
SET STL=f:\SoftWare\AndroidNDK\android-ndk-r10d\sources\cxx-stl\stlport\libs\armeabi-v7a\libstlport_shared.so
%g++% --sysroot=%SYSROOT% %CXX_FLAGS% -l%STL% -o helloworld helloworld.cpp
&#13;