1

我已经成功地在带有 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)Windows 或 2)MSYS 环境快乐。Windows上的LD_LIBRARY_PATH之类的东西?

或者这不是问题,我实际上(尽管看起来)以某种方式弄乱了二进制文件的编译方式?

编辑:

注意。无论出于何种原因,我的库似乎都是 .dll.a 文件,而不是 .dlls(请参阅 ls 结果),如果这与远程相关的话。

4

1 回答 1

0

windows 搜索与 exe 相同的目录、%PATH%(Windows) 或$PATH(msys) 目录中的任何目录,以及 windows 文件夹中的一些特殊目录,您可以将其添加/e/deps/libopencv/build/install/lib到您的$PATH. 我不确定这是否适用于 msys,您可能需要在 windows 中E:\deps\libopencv\build\install\lib添加%PATH%

如果您将程序提供给其他人,典型的解决方案是在与 EXE 相同的目录中包含 DLL 的副本。您可以通过使用命令对其进行符号链接来获得相同的效果

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

/e/deps/libopencv/build/install/目录中

于 2012-05-02T03:11:05.307 回答