MAC OS X 中 gcc 4.3 或更高版本的 OpenCV 编译错误

Posted

技术标签:

【中文标题】MAC OS X 中 gcc 4.3 或更高版本的 OpenCV 编译错误【英文标题】:OpenCV compilation error with gcc 4.3 or above in MAC OS X 【发布时间】:2012-05-11 15:06:44 【问题描述】:

我想在 OpenCV 中使用 BRIEF 和 ORB,为了在 OpenCV 中使用 SSE4.2(加速匹配),我们需要在 gcc 4.3 或更高版本并启用 SSE4.2 选项的情况下编译 OpenCV。

我用 gcc4.2.1 编译 OpenCV 没有问题,这是我的 Mac OS X 10.6.8 中的默认版本。

然后,我尝试使用 Macports 安装 gcc4.3、4.4、4.5、4.6、4.7、4.8 并将 gcc 切换到新的。我首先尝试使用默认设置(如 OpenCV 网站中的说明)安装 OpenCV。但是我无法像使用 gcc4.2.1 时那样编译代码。请注意,gcc4.2.1 没有问题。 gcc4.3或更高版本会出现问题。

您能告诉我问题出在哪里吗?似乎错误来自编译器兼容性。

一些错误是:

OpenCV-2.4.0/modules/highgui/src/window_cocoa.mm: In function 'void cvDestroyAllWindows()':
OpenCV-2.4.0/modules/highgui/src/window_cocoa.mm:198:21: error: expected ';' before 'in'
OpenCV-2.4.0/modules/highgui/src/window_cocoa.mm:198:21: error: 'in' was not declared in this scope
OpenCV-2.4.0/modules/highgui/src/window_cocoa.mm:198:24: error: expected ';' before 'list'


In file included from /opt/local/include/libavformat/avformat.h:42:0,
                 from OpenCV-2.4.0/modules/highgui/src/ffmpeg_codecs.hpp:78,
                 from OpenCV-2.4.0/modules/highgui/src/cap_ffmpeg_impl.hpp:56,
                 from OpenCV-2.4.0/modules/highgui/src/cap_ffmpeg.cpp:45:
/opt/local/include/libavcodec/avcodec.h:554:1: internal compiler error: Segmentation fault
Please submit a full bug report,

【问题讨论】:

作为参考,有问题的代码似乎是:for(NSString *key in list)。我通常不会在 C++ 中使用这种in 语法,所以我不太熟悉它,但也许其他人可以使用它来回答问题。 此外,internal compiler error: Segmentation fault Please submit a full bug report 听起来很吓人,可能是 gcc 的安装出了问题,或者您发现了某种错误。 【参考方案1】:

问题在于 window_cocoa.mm 中的 for(NSString *key in list) 是一个 Objective-C 2 构造,并且被编译为 Objective-C++

来自 GNU 的 gcc 不支持版本 2 语法,因此无法编译它。 Apple 的 gcc4.2 包含 Apple 扩展,包括 Objective C 2,但纯 gcc 不包含。

你必须试试 clang 编译器。

【讨论】:

谢谢。但是用gcc4.2编译就没有问题了? gcc4.3 或更高版本会出现问题。 Xcode 包含一个 Apple gcc4.2,它可以理解 Objective C 版本 2 的语法 但是使用 gcc4.2,我无法启用 sse4.2(核心 i7 中的 POPCNT 指令)并加快速度。 @alibaba - 你需要使用 Apple 编译器,除非 gcc 4.6 更改 gcc.gnu.org/gcc-4.6/changes.html 就足够了 我确实使用了 Apple-gcc4.2,但它没有启用 sse4.2 :-(

以上是关于MAC OS X 中 gcc 4.3 或更高版本的 OpenCV 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OS X Mountain Lion(或更高版本)和 Linux 上使用 X11/Xlib.h

flens lapack:需要 GNU GCC 4.7 或更高版本!我的mac有

mac os x 可以安装啥数据库

QtCreator:`clang:-stdlib=libc++ 的无效部署目标(需要 OS X 10.7 或更高版本)`

如何在 Mac OS X 上安装 mod_jk

csharp 检测OS(XP或更高版本)