8

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

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

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

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

   -lopencv_video  

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

我尝试在 xcode 构建设置中的“其他链接器标志”下添加此链接器标志,但仍然出现构建错误。
我想我在这里可能有两个问题,一个是使用 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

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

谢谢,沃尔特

4

1 回答 1

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++ 等。

使用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. 从构建文件夹中,转到 bin/ 并运行其中一项测试

    ./opencv-test-photo
    

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

  1. 启动 xcode 并创建一个新的 xcode 项目
  2. os x下项目类型选择Command Line Tool
  3. 打开项目的构建设置
  4. 在架构下,将架构设置为 64 位英特尔。还将有效架构设置为 x86_64
  5. 在 Build Options 下,将 Compiler for C/C++ 设置为 Default Compiler
  6. 在 Search Paths 下,将 Header Search Paths 设置为 /usr/local/include
  7. 同样在搜索路径下,将库搜索路径设置为 /usr/local/lib
  8. 在 Apple LLVM 编译器 4.2 - Language set C++ Standard Library to 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. 点击回车并选择要在项目中使用的库
  5. 确保您始终选择 libopencv_core.2.4.4.dylib
  6. 点击回车,您将在项目下看到选定的 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

干杯。

于 2013-03-27T15:28:47.590 回答