2010-04-15 3 views
3

Я пытаюсь использовать OpenCV (библиотеку видения компьютера), которая, как представляется, использует несколько DLL-файлов, расположенных в C:\OpenCV\bin (который был добавлен в переменную PATH). Однако, если я пытаюсь запустить простую тестовую программу, она дает системную ошибку:Почему моя программа на C++ не находит нужный файл .dll?

The program can't start because highgui.dll is missing from your computer. Try reinstalling the program to fix this problem.

Если я скопировать файл highgui.dll в папку system32, она работает, но я не хочу, чтобы поставить все необходимые DLL-файлы в папке system32.

Кто-нибудь знает, почему .dll-файл не найден или что я должен сделать, чтобы исправить его?
(Я уже проверял все пути в переменной PATH.)

+0

вопрос, связанный с семьей: http://stackoverflow.com/questions/2637499/how-can-a-win32-app-plugin-load-its-dll-in-its-own-directory/ –

+1

Добро пожаловать в DLL ад. Вам не только нужно выяснить, где находится DLL, но вам нужно будет выяснить, какая из них - * правильная * версия для использования. По этой причине многие приложения размещают библиотеки DLL в том же каталоге, что и исполняемый файл. Я предлагаю вам использовать явные пути для ваших DLL, а не полагаться на системный путь (что может привести к неправильной версии DLL). –

+0

Я не думаю, что могу редактировать пути к DLL, поскольку они, вероятно, указаны в библиотеке OpenCV. – RemiX

ответ

1

Я выследил исполняемый файл, который был создан Netbeans перед запуском и запущен, и он не дал никаких ошибок (поэтому Netbeans, вероятно, использует свои собственные пути для выполнения), поэтому попытался выяснить, как я могу заставить Netbeans искать правильное пути для библиотек DLL, а после добавление переменной окружения PATH = C: /OpenCV2.1/bin (Project Properties> Run> Environment), программа работает правильно!
Я надеюсь, что это не какой-то хак, который «случайно» решает мою проблему, создавая худшие побочные эффекты ...
Спасибо за помощь!

+0

Я знаю, что комментирую старое сообщение, но я чувствую, что это не очень хороший ответ. Я считаю, что было бы лучше скопировать DLL в каталог исполняемого файла, а не полагаться на изменение среды. Чем больше программ, загрязняющих PATH, тем хуже все ... – Phlucious

0

Вы пытались скопировать файл highgui.dll в свою папку сборки. Поскольку она динамически связана, ваша программа будет искать локально, чтобы ее найти, и если она не будет скопирована в ваш каталог сборки, она не сможет ее найти.

+0

Я использую Netbeans, но я не вижу в проекте папку сборки (извините, я не совсем знаком со сборками и т. Д.). Однако не странно ли, что OpenCV установлен (с установщиком Windows), он еще не работает? Будет ли все еще требоваться перемещение файлов в разные местоположения? – RemiX

0

Как запускается программа и как обновляется переменная PATH?

Если вы обновляете путь в командном окне, но запускаете приложение из своей среды IDE или с рабочего стола Windows, среда для запущенного процесса, вероятно, будет иметь другой параметр PATH, чем среда для вашего командного окна.

Аналогично, если вы измените PATH в апплете System Control Panel, это может не повлиять на IDE или командное окно, которое было запущено до того, как вы сделали редактирование PATH.

+0

В процессе установки OpenCV был добавлен каталог bin OpenCV. Затем я написал простую программу в Netbeans и запустил ее. Таким образом, переменная PATH устанавливается перед запуском. – RemiX

+0

Просто чтобы быть понятным - был ли Netbeans запущен после установки OpenCV? –

0

Я использую OpenCV 2.2 с Visual Studio 10. Для создания нового проекта я сделать следующие шаги ... 1.VC++ Каталоги -> Include Directories -> C: \ OpenCV2.2 \ включают библиотека каталогов - > C: \ OpenCV2.2 \ lib 2.C/C++ -> Общие сведения -> Дополнительные каталоги -> C: \ OpenCV2.2 \ bin 3.Linker -> Input -> opencv_core220.lib; opencv_highgui220.lib; opencv_calib3d220.lib; opencv_contrib220.lib; opencv_features2d220.lib; opencv_ffmpeg220.lib; opencv_flann220.lib; opencv_gpu220.lib; opencv_imgproc220.lib; opencv_legacy220.lib; opencv_ml220.lib; opencv_objdetect220.lib; opencv_ts220.lib; opencv_video220.lib;

  1. i скопируйте все файлы dll в папку для отладки проекта. это не дает мне устройства и все нормально ..
0

Я имел эту проблему с помощью Visual Studio 12 и после проверки, чтобы убедиться, что у меня не было опечаток в моих PATH в десятый раз, я заметил, что было пространство после полуколоны с предыдущего пути. Я удалил его, и Visual Studio смог найти нужные мне библиотеки DLL.

Если у вас есть несколько путей, хранящихся в переменной PATH, убедитесь, что они разделены полуколониями с без пробелов.

Смежные вопросы