在Xcode中的64位mac上编译opencv 2.4

时间:2013-03-13 14:07:02

标签: opencv

我有一个opencv项目,我一直在ubuntu 12.04下开发,在具有x86_64架构的mac上的parellels VM上。我认为有很多屏幕切换性能问题归因于VM,其中linux视频模式翻转了几秒钟,而opencv应用程序进行了摄像头访问。我决定将项目移动到计算机mac端的Xcode上,以继续opencv开发。但是,我对xcode并不熟悉,并且无法让项目在那里正确构建。

我安装了xcode。 我在mac上下载并解压缩了最新版本的opencv,然后根据willowgarage和其他各个位置的说明运行:〜/ src / opencv / build / cmake-gui -G Xcode .. 这似乎工作得很好(但是我现在想知道我是否在这里缺少一个架构设置,尽管它在Xcode中是64位英特尔)。 然后我用linux项目的源文件设置了一个xcode项目,并将include目录更改为使用/ opt / local / include / ...而不是/ usr / local / include / ... 我将xcode切换为在项目的构建设置中使用LLVM GCC编译器 然后将C ++的Apple LLVM对话框设置为语言方言到GNU ++ 11(看起来可能与上面的行不一致)

我没有在xcode中使用makefile,(我知道 - 它有自己的项目文件......)

我还遇到了一个链接器问题,看起来它们可能会通过添加此链接器标志来解决:

   -lopencv_video  

基于此处的类似帖子:other thread 但是在那种情况下,该人在他们的项目中使用了Makefile。

我尝试在xcode构建设置中的“Other Linker Flags”下添加此链接器标志,但仍然会出现构建错误。
我想我在这里可能有两个问题,一个是在使用Cmake构建opencv库时使用架构设置,另一个是在我的项目中使用链接器标志设置。

目前,构建错误列表如下所示:

    Undefined symbols for architecture x86_64:
    "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
    _main in main.o
    "cv::_OutputArray::_OutputArray(cv::Mat&)", referenced from:
    _main in main.o
    "cv::Mat::deallocate()", referenced from:
    cv::Mat::release()    in main.o
    "cv::Mat::copySize(cv::Mat const&)", referenced from:
    cv::Mat::Mat(cv::Mat const&)in main.o
    cv::Mat::operator=(cv::Mat const&)in main.o
    "cv::Mat::Mat(_IplImage const*, bool)", referenced from:
    _main in main.o
   "cv::imread(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)", referenced from:
   _main in main.o
   ---SNIP---
   ld: symbol(s) not found for architecture x86_64
   collect2: ld returned 1 exit status

任何人都可以就下一步尝试提供一些指导吗?

谢谢, 沃尔特

1 个答案:

答案 0 :(得分:15)

使用cmake 2.8.10和xcode 4.6.1在mac os x lion 10.7.5上编译和运行c ++ opencv 2.4.4的步骤 编辑:在mac os x mountain lion 10.8.3和Xcode 4.5

上使用opencv 2.4.5成功测试

拥有合适的工具

  1. http://sourceforge.net/projects/opencvlibrary/files/下载opencv-unix并在任何地方解压缩
  2. http://www.cmake.org/cmake/resources/software.html下载cmake .dmg并安装
  3. 我假设你在os x lion上有xcode 4.6,其中包括ios sdk 6.1
  4. 转到xcode首选项以下载并安装命令行工具,以便您使用g ++等。
  5. 使用cmake编译opencv

    1. 转到解压缩的opencv文件夹
    2. 创建构建目录

      mkdir build
      cd build
      cmake -D WITH_TBB=OFF -D BUILD_NEW_PYTHON_SUPPORT=OFF -D BUILD_FAT_JAVA_LIB=OFF -D BUILD_TBB=OFF -D BUILD_EXAMPLES=ON -D CMAKE_CXX_COMPILER=g++ CMAKE_CC_COMPILER=gcc -D CMAKE_OSX_ARCHITECTURES=x86_64 -D BUILD_opencv_java=OFF -G "Unix Makefiles" ..
      make -j8
      sudo make install
      
    3. 从构建文件夹
    4. 转到bin /并运行其中一个测试

      ./opencv-test-photo
      
    5. 创建自己的c ++ opencv xcode项目

      1. 启动xcode并创建一个新的xcode项目
      2. 为os x
      3. 下的项目类型选择命令行工具
      4. 打开项目的构建设置
      5. 在架构下,将架构设置为64位英特尔。还将Valid Architectures设置为x86_64
      6. 在Build Options下,将Compiler for C / C ++设置为Default Compiler
      7. 在“搜索路径”下,将“标题搜索路径”设置为/ usr / local / include
      8. 也在“搜索路径”下,将“库搜索路径”设置为/ usr / local / lib
      9. 在Apple LLVM编译器4.2下 - 语言集C ++标准库到libstd ++(使用OpenCV 2.4.6,Xcode 5,LLVM 5.0和10.8.5,将语言方言和std库设置为“编译器默认值”)
      10. 将已编译的opencv库添加到项目中

        1. 转到
        2. 中“构建设置”标签旁边的“构建阶段”标签
        3. 在Link Binary With Libraries中,单击+号并选择Add Other
        4. 点击键盘上的前斜杠/并输入/ usr / local / lib
        5. 按Enter键并选择要在项目中使用的库
        6. 确保您始终选择libopencv_core.2.4.4.dylib
        7. 按Enter键,您将在项目下看到所选的dylib
        8. 写一些代码

          1. 首先让我们整理文件,右键单击项目蓝图图标,然后选择新建组
          2. 将新组命名为opencv或其他
          3. 拖动dylib并将其放入该组
          4. 打开main.cpp
          5. 从opencv附带的任何样本测试中复制代码并将其粘贴到此处
          6. 确保添加了所有必需的dylib,例如,如果将opencv_test_stitching.cpp代码复制到main.cpp中,则需要在前面的步骤中添加以下库

            • libopencv_core.2.4.4.dylib
            • libopencv_highgui.2.4.4.dylib
            • libopencv_stitching.2.4.4.dylib
          7. 干杯。