当我在workthread中使用-fopenmp并得到分段错误时。怎么了?

时间:2017-04-26 02:37:18

标签: android android-ndk arm openmp

我尝试将兴奋的代码移植到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;
&#13;
&#13;

这是我的Android NDK r10d的编译脚本。

&#13;
&#13;
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;
&#13;
&#13;

0 个答案:

没有答案