我有一个C ++ 11代码库,我用OS X Lion上的MacPorts编译gcc 4.6。我还需要编译和链接一些特定于操作系统的Objective C / C ++文件以生成最终的可执行文件。我想使用相同的编译器版本来编译整个项目,但我无法获得gcc的MacPorts版本4.6来识别Objective-C文件;它总是试图将它们解释为C ++代码并忽略.mm文件扩展名。 (编译这些文件确实使用gcode的Xcode版本,而不是MacPorts版本。但是gcc是版本4.2,我想用gcc 4.6或更高版本编译所有内容。)
忘记IDE或构建工具:我从编译器的命令行调用得到相同的结果。也就是说,我记录了一个命令行,该命令行用于使用Apple gcc编译.mm文件,验证是否它可以从命令行工作,然后运行相同的命令,但没有改变,但编译器使用它并不起作用。我错过了什么?
答案 0 :(得分:1)
看起来我可能遇到的具体问题可能是Apple特定的语言扩展,因为我得到的具体错误与a blog post的引用相同:
添加之后,我好了大约30秒,直到我到达 我的项目的一部分,其中有一些COCOA Objective-C UI的东西 编译。
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h:75:24: 错误:在'^'标记之前预期的unqualified-id /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h:75:24: 错误:在'^'标记
之前预期')' 哦,哦。我知道这是什么。这是Apple的“块”语言 延期。似乎在一堆系统中使用了块 头文件。我认为没有办法绕行 这使用MacPorts gcc。 FSF gcc只是不知道块。 幸运的是,我在Objective C / C ++代码中没有任何内容 需要用gcc 4.6编译,所以我只有这个目标 使用clang编译。