2012-05-02 57 views
0

我已經成功構建了一個演示應用程序,在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結果),如果這與遠程相關。

回答

0

窗口搜索相同的目錄下的EXE,在%PATH%(Windows)中的任何目錄或$PATH(MSYS)目錄,以及在Windows文件夾了一些特殊的人 你可以添加/e/deps/libopencv/build/install/lib$PATH。我不確定這是否適用於msys,您可能需要在windows中添加E:\deps\libopencv\build\install\lib%PATH%

如果您將程序授予他人,則典型的解決方案是將DLL的副本包含在與EXE相同的目錄中。你可以通過一個符號鏈接,以使其與命令

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

而在/e/deps/libopencv/build/install/目錄

+0

嗯,那些都似乎有助於獲得此相同的效果。將dll.a文件移動到同一目錄並將它們重命名爲.dll導致「libopencv_core231.dll不是設計爲在Windows上運行,或者它包含錯誤,請嘗試再次安裝該程序...」 – Doug

+0

不知道wtf是與.dll.a文件一起使用,但是混淆了靜態鏈接選項,我終於設法建立了正常的.DLL文件,這些文件完全像上面所說的那樣鏈接。 – Doug

相關問題