我已經成功構建了一個演示應用程序,在Windows上使用opencv與MSYS shell環境。如何在MSYS中運行鏈接到DLL的程序?
我沒有使用預建的opencv安裝程序,我在本地下載並編譯源代碼(這是推薦的方法)。
建設的OpenCV和運行make安裝後,所有的文件都興高采烈地:
/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})
在這裏要完全清楚:構建二進制文件是成功。
現在,當我從shell中運行它,我得到的消息:
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環境高興。像Windows上的LD_LIBRARY_PATH?
或者這不是問題,我已經(儘管出現)以某種方式搞亂了二進制編譯的方式?
編輯:
注意:無論出於何種原因,似乎我的庫都是.dll.a文件,而不是.dll(請參閱ls結果),如果這與遠程相關。
嗯,那些都似乎有助於獲得此相同的效果。將dll.a文件移動到同一目錄並將它們重命名爲.dll導致「libopencv_core231.dll不是設計爲在Windows上運行,或者它包含錯誤,請嘗試再次安裝該程序...」 – Doug
不知道wtf是與.dll.a文件一起使用,但是混淆了靜態鏈接選項,我終於設法建立了正常的.DLL文件,這些文件完全像上面所說的那樣鏈接。 – Doug