在OSX Yosemite上使用加速框架编译 我最近升级到优诗美地国家公园,但是似乎有一个问题,编译使用加速框架的C++程序,通过GHBRW获得GCC-4.9。我想知道是否有人能解决这个问题?这在以前的OSX版本上不是问题 作为一个例子,考虑编译以下代码。 #include<iostream> #include<Accelerate/Accelerate.h> using namespace std; { return 0; }

在OSX Yosemite上使用加速框架编译 我最近升级到优诗美地国家公园,但是似乎有一个问题,编译使用加速框架的C++程序,通过GHBRW获得GCC-4.9。我想知道是否有人能解决这个问题?这在以前的OSX版本上不是问题 作为一个例子,考虑编译以下代码。 #include<iostream> #include<Accelerate/Accelerate.h> using namespace std; { return 0; },c++,homebrew,osx-yosemite,accelerate-framework,C++,Homebrew,Osx Yosemite,Accelerate Framework,但在使用g++-4.9(g++-4.9(自制gcc49 4.9.1)4.9.1)编译时: 我得到以下编译错误: > g++-4.9 -flax-vector-conversions -o main.out main.cpp -framework Accelerate In file included from /usr/include/os/object.h:27:0, from /System/Library/Frameworks

但在使用g++-4.9(g++-4.9(自制gcc49 4.9.1)4.9.1)编译时:

我得到以下编译错误:

    > g++-4.9 -flax-vector-conversions -o main.out main.cpp -framework Accelerate
    In file included from /usr/include/os/object.h:27:0,
                     from /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/LinearAlgebra/base.h:6,
                     from /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/LinearAlgebra/LinearAlgebra.h:10,
                     from /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/vecLib.h:65,
                     from /System/Library/Frameworks/Accelerate.framework/Headers/Accelerate.h:20,
                     from main.cpp:2:
    /usr/include/os/base.h:113:20: error: missing binary operator before token "("
     #if __has_extension(attribute_overloadable)
                        ^
    /usr/include/os/base.h:119:54: error: missing binary operator before token "("
     #if __has_feature(objc_fixed_enum) || __has_extension(cxx_strong_enums)
                                                          ^
    In file included from /usr/include/dispatch/dispatch.h:51:0,
                     from /System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h:56,
                     from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h:8,
                     from /System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h:41,
                     from /System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/vImage_Utilities.h:14,
                     from /System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/vImage.h:200,
                     from /System/Library/Frameworks/Accelerate.framework/Headers/Accelerate.h:24,
                     from main.cpp:2:
    /usr/include/dispatch/object.h:143:15: error: expected unqualified-id before '^' token
     typedef void (^dispatch_block_t)(void);
                   ^
    /usr/include/dispatch/object.h:143:15: error: expected ')' before '^' token
    /usr/include/dispatch/object.h:362:3: error: 'dispatch_block_t' has not been declared
       dispatch_block_t notification_block);

   ^

这两个故障都是由GCC不支持的铿锵特性引起的。您可以使用clang而不是GCC,也可以绕过它们

第一个是
中的一个bug;它应该像对
\uuuu具有内置的
等一样,防止
\uu具有未定义的扩展名
。您可以通过在包含系统头之前放置以下内容来解决此问题:

#ifndef __has_extension
#define __has_extension(x) 0
#endif
第二个问题是GCC不支持块。您应该能够通过在include之前添加以下内容来解决此问题:

#define vImage_Utilities_h
#define vImage_CVUtilities_h

这将阻止您使用一些vImage功能(即,简化与核心图形和核心视频的互操作性),但无论如何,您都无法使用GCC中的这些功能,因此您不会放弃任何东西。

这对我尝试使用Accelerate在我的新mac上编译第三方程序很有效。谢谢
#ifndef __has_extension
#define __has_extension(x) 0
#endif
#define vImage_Utilities_h
#define vImage_CVUtilities_h