JNI:未定义的符号GOMP_parallel

时间:2018-06-09 10:39:42

标签: c java-native-interface runtime-error undefined openmp

我正在使用JNI作为Scala软件和动态本机库之间的接口,我们称之为libnative.so。

部分所述本机代码使用openmp来执行一些并行操作。因此,在构建此动态库时,我将'-fopenmp'指定为CFLAG和LINKFLAG。

编译过程中没有错误。但是,在运行时间上,我得到了这个:

  

java:符号查找错误:/tmp/jni-5458866585640472540/libnative.so:   未定义的符号:GOMP_parallel

当使用objdump来探索库中包含的符号时,会找到引用的符号,尽管它似乎被标记为未定义:

$ objdump -TC libnative.so | grep "OMP"
0000000000000000      D  *UND*  0000000000000000              GOMP_parallel

在探索此错误一段时间之后,在我看来,对外部库(例如openmp)的引用实际上必须是未定义的并在运行时加载。我也在想,JRE无法在系统执行时找到这样的库。

这些假设是真的吗?怎么可以解决这个问题?

提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

<强>修正:

从多个静态库构建动态库时,我们需要将 -fopenmp 添加到此过程中,即使我们已经为每个所述模块执行了此操作。