Ram*_*rma 2 opencv cmake visual-c++ windows-8 visual-studio-2012
我正在尝试使用OpenCV库在我的Windows 8商店应用程序中使用C++/CX进行一些图像处理.我能够使用Visual C++ 2012构建OpenCV库,但是当我打包我的应用程序并运行Windows应用程序认证工具包时,我收到一些错误,说OpenCV DLL使用了一些不受支持的Windows API.我该如何解决这些错误?
我已经设法为ARM构建了一个OpenCV子集.
我开始得到我感兴趣的子集,用于在x86中构建Windows应用商店应用程序.在将CMake指向OpenCV的源代码下载之后,我使用Visual Studio 11生成器来配置x86项目.我在CMake中添加了一个名为TARGET_METRO的新构建选项,并使用它来进一步配置其他项目.
这让我可以关闭几个我不想构建的第三方组件,例如:
OCV_OPTION(BUILD_PERF_TESTS "Build performance tests" ON IF (NOT IOS AND NOT TARGET_METRO) )
Run Code Online (Sandbox Code Playgroud)
我以这种方式关闭了WITH_VIDEOINPUT,BUILD_PERF_TESTS和BUILD_TESTS.当TARGET_METRO打开时,我还添加了拉曼提到的定义:
if(TARGET_METRO)
add_definitions(-DWINAPI_FAMILY=WINAPI_FAMILY_APP)
add_definitions(-D_UNICODE)
endif()
Run Code Online (Sandbox Code Playgroud)
然后我继续使用CMake生成项目的x86(Visual Studio 11)版本,并开始尝试构建项目.您将遇到许多问题,其中大多数问题与WinRT中缺少的API有关.其中大部分是机械变化(例如,换出InitializeCriticalSection
了InitializeCriticalSectionEx
).我将这些更改包装起来,#if WINAPI_FAMILY == WINAPI_FAMILY_APP
以免影响非TARGET_METRO构建.
在为ARM构建时,我所做的是启动CMake并使用Visual Studio 11生成器生成一个新项目(在名为"ARM"的目录下),然后开始手动编辑生成的项目文件.
您需要做出的主要改变是:
<AppContainerApplication>true</AppContainerApplication>
到Globals属性组在项目级别添加以下内容(对于要为ARM构建的每个项目):
<ItemDefinitionGroup>
<ClCompile>
<CompileAsWinRT>false</CompileAsWinRT>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
</Link>
</ItemDefinitionGroup>
Run Code Online (Sandbox Code Playgroud)从链接中删除"/ machine:X86":其他选项(如果它在那里)
归档时间: |
|
查看次数: |
8074 次 |
最近记录: |