UnsatisfiedLinkError: указанная процедура не могла быть найдена

[g1] Гибкие решения работали для меня настолько, что делали нижний колонтитул липким, но, к сожалению, изменение тела для использования гибкого макета изменило некоторые из наших макетов страниц, и не в лучшую сторону. В конечном итоге у меня получилось: [/g1] [f1] [g2] Я получил это из ответа ctf0 по адресу [g0] https://css-tricks.com/couple-takes-sticky-footer/ [/g0] [/g2]
12
задан matt 1 October 2008 в 21:28
поделиться

5 ответов

Я выяснил проблему. Это было doozy. Сообщение "Указанная процедура не могло быть найдено" для UnsatisfiedLinkError, указывает, что функция в корне dll или в зависимом dll не могла быть найдена. Наиболее вероятная причина этого в ситуации JNI состоит в том, что собственная функция JNI не экспортируется правильно. Но это может, по-видимому, произойти, если зависимый DLL загружается и что DLL пропускает функцию, требуемую ее родителем.

Как пример, у нас есть библиотека под названием input.dll. Порядок поиска DLL состоит в том, чтобы всегда смотреть в каталоге приложения сначала и каталогах PATH в последний раз. В прошлом мы всегда выполняли исполняемые файлы из того же каталога как input.dll. Однако существует другой input.dll в системном каталоге окон (который является посреди порядка поиска DLL). Таким образом, при выполнении этого от апплета Java, если я включаю код, описанный выше в апплете, который заставляет input.dll быть загруженным, это загружает input.dll из системного каталога. Поскольку наш код ожидает определенные функции в input.dll, который не является там (потому что это - другой DLL), сбои загрузки с сообщением об ошибке о недостающих процедурах. Не потому что функции JNI экспортируются неправильно, но потому что неправильный зависимый DLL был загружен, и он не имел ожидаемых функций в нем.

17
ответ дан 2 December 2019 в 19:00
поделиться

Обычно, при соединении с другими библиотеками, необходимо связаться с соответствующим .lib файлом. Это кажется, что Вы не ссылаетесь на все библиотечные файлы, в которых Вы нуждаетесь. Проверьте то, что не связывается, и удостоверьтесь, что Вы добавляете, что это - lib к списку для компоновщика.

0
ответ дан 2 December 2019 в 19:00
поделиться

Существует шанс, что DLL был создан с помощью C++ (в противоположность C). если Вы не заботились, чтобы сделать экстерна на процедуре, это - одна возможная причина.

Попытайтесь экспортировать все функции из DLL. Если список включает Вашу функцию, то Вы хороши.

2
ответ дан 2 December 2019 в 19:00
поделиться

Вы создавали новый внешний DLL с помощью стандартной процедуры JNI? Т.е. использование javah и т.д? Если так, затем я не уверен что не так.

В противном случае затем процедура, которую Вы пытаетесь назвать, не была экспортирована (как упомянуто anjanb). Я знаю о двух способах экспортировать функции: отдельный список экспорта и маркировка определенных функций с __ declspec (dllexport).

Не может переменная доступа в C++, DLL из приложения C имеет немного больше информации тема DLLs.

0
ответ дан 2 December 2019 в 19:00
поделиться

Скомпилируйте код C ++ в режиме отладки. Затем вставьте DebugBreak (); заявление, с которого вы хотите начать отладку. Запустите java-код. При обнаружении оператора DebugBreak () вы увидите всплывающее окно с кнопкой Debug на нем. Нажмите здесь. Dev Studio откроется с вашей программой в машинном коде. Дважды перешагните через отладчик, и вы сможете перешагнуть через исходный код.

0
ответ дан 2 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: