JNI: неопределенный символ GOMP_parallel - PullRequest
0 голосов
/ 09 июня 2018

Я использую 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 голосов
/ 10 июня 2018

Исправлено:

При сборке динамической библиотеки из нескольких статических библиотек нам нужно добавить -fopenmp к этому процессу, даже если мы уже сделали этодля каждого из указанных модулей.

...