首页 文章

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

提问于
浏览
0

我已经使用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

    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/ 目录中

相关问题