/ / Як запустити програму, пов’язану з DLL, у MSYS? - windows, dll, cmake, msys -

Як запустити програму, пов'язану з DLL у MSYS? - windows, dll, cmake, msys

Я успішно створив демонстраційний додаток за допомогою opencv у Windows із середовищем оболонки MSYS.

Я НЕ використовував попередньо вбудований інсталятор opencv, я завантажував та компілював джерело локально (це рекомендований метод).

Після побудови opencv та запуску make install всі файли щасливо знаходяться в:

/e/deps/libopencv/build/install/

Я можу успішно створити зразок додатка проти цього, використовуючи директиви cmake у відповідності до:

find_package(OPENCV REQUIRED)
link_directory(${OpenCV_LIB_DIR})
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(target ${OpenCV_LIBS})

Щоб бути тут повністю зрозумілим: побудова двійкового файлу є успішний.

Тепер, коли я запускаю його з оболонки, я отримую повідомлення:

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

Отже ... я знаю, де знаходяться бібліотеки:

$ ls /e/deps/libopencv/build/install/lib/
libopencv_calib3d231.dll.a  libopencv_features2d231.dll.a  libopencv_highgui231.dll.a     libopencv_ml231.dll.a         libopencv_video231.dll.a
libopencv_contrib231.dll.a  libopencv_flann231.dll.a       libopencv_imgproc231.dll.a  libopencv_objdetect231.dll.a
libopencv_core231.dll.a     libopencv_gpu231.dll.a         libopencv_legacy231.dll.a   libopencv_ts231.a

Що тепер?

Я думаю, я міг би спробувати зробити cmake побудувати статичний двійковий файл, але це здається досить екстремальним.

Як я можу якось зробити 1) вікна, або 2) середовище MSYS щасливим. Щось на зразок LD_LIBRARY_PATH на вікнах?

Або це не проблема, і я насправді (незважаючи на зовнішність) якось зіпсував спосіб складання двійкового файлу?

Редагувати:

Примітка. З якоїсь причини здається, що мої бібліотеки - це файли .dll.a, а не .dll (див. Результат ls), якщо це віддалено стосується.

Відповіді:

0 для відповіді № 1

Windows шукає той самий каталог, що і exe, будь-який каталог у %PATH% (Windows) або $PATH (msys), а також кілька спеціальних у папці windows Ви можете додати /e/deps/libopencv/build/install/lib твоєму $PATH. Я не впевнений, що це буде працювати для msys, можливо, вам доведеться додати E:depslibopencvbuildinstalllib до %PATH% у вікнах.

Типове рішення для цього, якщо ви даєтепрограма для інших полягає у включенні копії DLL в той самий каталог, що і EXE. ви можете отримати цей самий ефект, зробивши символічне посилання на нього за допомогою команди

ln -s /e/deps/libopencv/build/install/lib/libopencv_core231.dll libopencv_core231.dll

в той час як в /e/deps/libopencv/build/install/ каталог