我正在try 将Dll导入依赖于OpenCV的Windows.Net/C#应用程序.它是我自己的DLL;我从源代码构建它,并隐式链接到OpenCV"world"DLL,在这个DLL中,OpenCV被构建到一个包含其所有依赖项的DLL中.当我使用here中的预编译二进制文件时,这是可行的.
但是,我需要构建此应用程序的x86版本以及x64,而OpenCV不提供用于x86的预构建二进制文件.我没有try 自己从源代码中构建OpenCV,而是决定try 以vcpkg包的形式获得它.我执行了以下vcpkg命令:
.\vcpkg.exe install opencv[world]:x86-windows
和
.\vcpkg.exe install opencv[world]:x64-windows
This does give me opencv_world4.dll
和 opencv_world4d.dll
和 associated .lib
files but when I attempt to DllImport my DLL with the OpenCV dependency 和 opencv_world4.dll
next to my DLL in the working directory, this version of the DLL fails to load with a "not found" exception. If I directly try to LoadLibrary
this DLL it returns NULL 和 GetLastError
returns 126.
我想知道这个来自vcpkg的DLL是不是真的没有用静态链接的所有依赖项构建,或者这是运行库switch 、/MT vs/MD或其他什么的问题?如果有任何帮助,我很感激.
编辑:使用Dependency Walker查看这一点,很明显vcpkg构建的DLL依赖于各种DLL
而预置的DLL则不会.因此,我的问题减少到Is there a way to get vcpkg to make a real 100个.为清楚起见,world
个功能的vcpkg文档说明如下:
功能名称:World Description:编译为单一包支持 对于OpenCV内部版本依赖:[对象对象]