【发布时间】: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