2013-05-21 4 views
0

Я использую JNI для интерфейса с CAN-драйвером, который я написал с помощью MSVC++ 2012. Все компилируется и работает нормально - но только на моем компьютере. Всякий раз, когда я пытаюсь запустить на любом другом компьютере, я получаю JNI «UnsatisfiedLinkError» - не может найти зависимые библиотеки. Ранее я реализовал JNI, и обычно эта проблема устранена путем простой установки распространяемого пакета Microsoft Visual C++ перед запуском моей программы. Распространяемый ресурс не решает мою проблему, однако установка всей IDE для MSVC++ Express 2012 на компьютер, похоже, делает все очень хорошо. Таким образом, я предполагаю, что это означает, что есть определенная зависимость, которая устанавливается и добавляется в PATH при установке IDE, но не при установке Redistributable. Просто для проверки, я удалил IDE, и мой драйвер JNI снова не загрузился. Основное различие между этой и моими другими реализациями JNI заключается в том, что я использую Windows.h, так как это необходимо для CAN API, который я использую в своем драйвере. Любые идеи о любых библиотеках, установленных с IDE, но не о распространении и прототипы которых включены в Windows.h? (Примечание: я знаю, что Windows.h включает в себя несколько заголовков, но я полагаю, что другие критерии делают проблему более конкретной.)Какие библиотеки Windows отсутствуют в распространяемом пакете Visual C++?

ответ

0

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

Убедитесь, что вы используете правильный «Распространяемый пакет Microsoft Visual C++». 2012, 2012 Обновление 1 и 2012 Обновление 2 (как и многие из 2010, 2008, ...).

Предполагается, что ваши зависимости - это DLL с загрузкой, вы можете использовать Depends, чтобы узнать, что отсутствует. (Примечание: вы обычно видите некоторые DLL с задержкой загрузки, которые «отсутствуют». Игнорируйте thoses, см. FAQ.)

Конечно, как только вы узнаете имя и путь к отсутствующей DLL, вы будете вам нужно выяснить, какой пакет redist устанавливает его.

+0

Да, вы сначала предполагали, что это действительно так - спасибо. – Ben