1

在这个项目中,我有一个预编译库,它是使用“-fopenmp”标志编译的。构建整个项目是可行的,但是一旦使用 OpenMP,我就会收到以下错误:

A/libc:致命信号 8 (SIGFPE),代码 1,tid 32702 (ndroidapp) 中的故障地址 0x8a8fe7cd

只要通过 JNI 使用 OpenMP,就会发生这种情况。不幸的是,我找不到太多关于该错误的信息。如果我在没有 OpenMP 的情况下编译它,整个项目都可以正常工作。

这是 Gradle 的一部分:

externalNativeBuild {
        cmake {
            cppFlags "-std=gnu++14 -fopenmp -fPIE -fPIC"
            cFlags "-fopenmp -fPIE -fPIC"
            abiFilters 'x86'
            arguments   "-DANDROID_STL=gnustl_static",
                        "-DANDROID_PIE=ON",
                        "-DANDROID_TOOLCHAIN=clang",
                        "-DANDROID_CPP_FEATURES=exceptions rtti",
                        "-DANDROID_ALLOW_UNDEFINED_SYMBOLS=TRUE"
        }
    }

这里有几行我用来编译库的makefile:

CFLAGS   := -fopenmp -fPIE -fPIC
CXXFLAGS := -fopenmp -fPIE -fPIC
LDFLAGS  := -fPIE -fPIC -pie -fopenmp

我能做些什么来解决这个问题?错误可能来自哪里?在这种情况下甚至可以使用 OpenMP 吗?

4

0 回答 0