0

背景

我的目标是为 ios 编译 OpenCV 并支持 armv7s(s 是最难的部分)架构,但一直无法取得任何进展。我最近的理论是问题在于库附带的 cmake 文件使用 gcc 作为编译器,我认为它不支持 armv7s(如果我错了,请告诉我)。但是,我对 cmake 完全陌生,并且无法更改编译器。

我怀疑编译器的原因是因为该行

set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string  "Build architecture for iOS")

据我所知应该包括armv7s。将该行更改为

set (CMAKE_OSX_ARCHITECTURES "armv6;armv7;armv7s;i386" CACHE string  "Build architecture for iOS")

没有效果。

我知道这里这里这里都有关于如何设置编译器的说明。我的问题是我正在尝试更改现有的 cmake 系统,但不知道我的更改可能会产生什么后果。有问题的代码可以在这里下载。为了构建框架,我在 OpenCV-2.4.2/ios 中运行 python 脚本

python build_framework.py ~/Desktop

据我所知,相关的 cmake 文件位于 OpenCV-2.4.2/ios/cmake 中。只有 3 个,而且都很短。我最近的尝试是更改工具链中的两行

CMAKE_FORCE_C_COMPILER (gcc gcc)
CMAKE_FORCE_CXX_COMPILER (g++ g++)

SET (DEVROOT    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer")
SET (CC         "${DEVROOT}/usr/bin/llvm-gcc-4.2")
SET (CXX        "${DEVROOT}/usr/bin/llvm-g++-4.2")
CMAKE_FORCE_C_COMPILER          (${CC} CLang)
CMAKE_FORCE_CXX_COMPILER        (${CXX} CLang)

试图复制这个SO 问题。

问题

  1. 我的第一个也是最重要的问题是,这是否超出了我的理解范围。我一直假设更改编译器/目标体系结构将是在某处设置一个简单的标志,但我越来越不相信这是真的。此外,还有一个完整的目录 OpenCV-2.4.2/cmake 充满了更大的 cmake 文件,我一直在避免这些文件,希望我不必担心它们的内容。这是我能在不到 10 小时内解决的问题吗?
  2. 如果您对上一个问题的回答是肯定的,您能给我一些指导吗?推荐阅读?我是否有理由忽略 OpenCV-2.4.2/cmake 的内容?我已经在黑暗中拍摄了很长一段时间,但没有成功。
  3. 如果事实证明这和我最初希望的一样简单,我该怎么做?

更新

我从来没有弄清楚如何做到这一点,但是这里有一个库的 xcode 版本,可以从中轻松更改编译设置。

4

2 回答 2

0

我在您的问题中看到了很多链接,但没有找到包含如何与 CMake 交叉编译的信息的原始链接。

您不应更改现有构建系统中的任何内容。

通常,您需要为您的目标架构创建工具链文件并使用它运行 cmake。

cmake -DCMAKE_TOOLCHAIN_FILE=<你的工具链文件><从opencv到CMakeLists.txt的路径>

于 2012-09-27T08:23:05.563 回答
0

设置CMAKE_C_COMPILIERCMAKE_CXX_COMPILIER满足您的需求。

编辑:这假设您已经成功地为 armv7 构建了这个。
Edit2:这只会改变编译器。

于 2012-09-24T19:59:31.917 回答