【问题标题】:JNI: undefined symbol GOMP_parallelJNI:未定义符号 GOMP_parallel
【发布时间】:2018-06-09 10:39:41
【问题描述】:

我使用 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 在系统执行时无法找到这样的库。

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

提前谢谢大家。

【问题讨论】:

  • ldd libnative.so 是否表明它与libgomp.so 相关联?如果没有,请在链接时为libnative.so添加-lgomp
  • @Gilles 感谢您的评论。我已经修好了。

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


【解决方案1】:

修复:

当从几个静态库构建动态库时,我们需要将 -fopenmp 添加到这个过程中,即使我们已经为每个所述模块都这样做了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2013-10-22
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多