Загрузка аварий JNI с неопределенными символами - PullRequest
4 голосов
/ 29 апреля 2011

Я пытаюсь связать свою нативную библиотеку с Java-приложением, но когда я пытаюсь ее запустить, я получаю исключение java.lang.UnsatisfiedLinkError с жалобой на пропущенные символы (_ZTVN10__cxxabiv117__class_type_infoE)

Я скомпилировал общую библиотеку с g ++, как и любую другую общую библиотеку.

Это моя первая попытка с JNI, и я не могу понять, как заставить все связываться правильно.

Ответы [ 2 ]

4 голосов
/ 29 апреля 2011

Вы можете использовать исполняемый файл c++filt, который поставляется с вашей цепочкой инструментов, чтобы устранить недостающие символы.Тогда нужно выяснить, какая часть вашего кода не выполняет то, что должна делать.

nm может использоваться для перечисления символов, определенных в коде.Если вы видите, что символ имеет U в той же строке, он не определен и может привести к этой ошибке.передача -E в gcc / g ++ останавливает компилятор после шага предварительной обработки, что также может быть полезно.

Причины, по которым я имел эту ошибку в прошлом, по существу:

  • не строит что-то, что я думал, что строю (это случается с лучшими из нас)
  • Согласование искажения символа неожиданным образом
2 голосов
/ 29 апреля 2011

Попробуйте повторно связать без опции -Wl,-soname,liblzw_compressor.so.Если это работает, я не могу сказать вам, почему, за исключением нескольких месяцев назад, у меня была очень похожая неопределенная ошибка символа (возможно, даже это был тот же символ), и удаление опции -Wl из моей линии исправило ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...