1

我有一个 C++11 代码库,我使用 OS X Lion 上的 MacPorts 的 gcc 4.6 编译。我还需要编译和链接一些特定于操作系统的 Objective C/C++ 文件以生成最终的可执行文件。我想使用相同的编译器版本来编译整个项目,但是我无法让 gcc 的 MacPorts 版本 4.6 来识别 Objective-C 文件;它总是试图将它们解释为 C++ 代码并忽略 .mm 文件扩展名。(编译这些文件确实适用于 gcc 的 Xcode 版本,而不是 MacPorts 版本。但是,gcc 是 4.2 版,我想用 gcc 4.6 或更高版本编译所有内容。)

忘记 IDE 或构建工具:我从编译器的命令行调用中得到相同的结果。也就是说,我记录了一个用于使用 Apple gcc 编译 .mm 文件的命令行,验证是它确实可以从命令行工作,然后运行相同的命令,没有任何改变,但使用了编译器并且它不起作用。我错过了什么?

4

1 回答 1

1

看来我遇到的具体问题可能是由于 Apple 特定的语言扩展,因为我得到的具体错误与博客文章中的引用相同:

添加这个之后,我在大约 30 秒内都很好,直到我到达我的项目的一部分,其中正在编译一些 COCOA Objective-C UI 内容。

/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h:75:24:错误:在'^'令牌/Developer/SDKs/MacOSX10.7之前预期的不合格ID .sdk/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h:75:24: 错误:在 '^' 标记之前预期 ')'

哦哦。我知道这是什么。这是 Apple 的“阻止”语言扩展。似乎在一堆系统头文件中使用了块。我认为没有办法使用 MacPorts gcc 解决这个问题。FSF gcc 只是不知道块。对我来说幸运的是,我的 Objective C/C++ 代码中没有任何需要使用 gcc 4.6 编译的内容,所以我只是使用 clang 编译了这个目标。

于 2013-04-16T23:37:36.933 回答