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

Wal*_*alt 8 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  
Run Code Online (Sandbox Code Playgroud)

基于此处的类似帖子:其他线程 但是在这种情况下,该人员正在他们的项目中使用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
Run Code Online (Sandbox Code Playgroud)

有人可以为下一步尝试提供一些指导吗?

谢谢,沃尔特

小智 15

步骤编译和Mac OS X上的狮子10.7.5通过CMake 2.8.10和xcode的4.6.1 EDIT运行C++的OpenCV 2.4.4:成功地与OpenCV的2.4.5 Mac OS X上的美洲狮10.8.3和Xcode的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 ++等.

使用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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从build文件夹中,转到bin /并运行其中一个测试

    ./opencv-test-photo
    
    Run Code Online (Sandbox Code Playgroud)

创建自己的c ++ opencv xcode项目

  1. 启动xcode并创建一个新的xcode项目
  2. 为os x下的项目类型选择命令行工具
  3. 打开项目的构建设置
  4. 在架构下,将架构设置为64位英特尔.还将Valid Architectures设置为x86_64
  5. 在Build Options下,将Compiler for C/C++设置为Default Compiler
  6. 在"搜索路径"下,将"标题搜索路径"设置为/ usr/local/include
  7. 也在"搜索路径"下,将"库搜索路径"设置为/ usr/local/lib
  8. 苹果下LLVM编译器4.2 - 语言设置C++标准库libstd ++(带OpenCV的2.4.6,Xcode中5,LLVM 5.0和10.8.5,同时设置语言方言和std库 "编译器的默认" 来代替)

将已编译的opencv库添加到项目中

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

写一些代码

  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

干杯.