如何在MSYS中运行链接到DLL的程序?

时间:2012-05-02 03:02:04

标签: windows dll cmake msys

我已经使用MSYS shell环境在Windows上使用opencv成功构建了一个演示应用程序。

我没有使用预建的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})

这里要完全清楚:构建二进制文件成功

现在,当我从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一样?

或者这不是问题,我实际上(尽管出现)不知何故弄乱了二进制编译的方式?

编辑:

NB。无论出于何种原因,我的库似乎是.dll.a文件,而不是.dll(参见ls结果),如果它是远程相关的。

1 个答案:

答案 0 :(得分:0)

windows搜索与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/目录中