如何让 XCode 构建一个包含 Objective-C++ 的项目?
Posted
技术标签:
【中文标题】如何让 XCode 构建一个包含 Objective-C++ 的项目?【英文标题】:How do I get XCode to build a project with Objective-C++ in it? 【发布时间】:2014-04-12 08:48:09 【问题描述】:我成功地将 Scintilla 框架添加到我的 XCode 项目中(即它正确地找到了头文件),但是因为它是用 Objective-C++ 编写的,所以它无法编译。由于::
s,我收到 8 个语法错误。我已经发现你不能从纯 Objective-C 文件中包含 Objective-C++,所以我将文件扩展名更改为 mm
。它仍然给我同样的 8 个错误。
我还将(导入文件的)文件类型更改为sourcecode.cpp.objcpp
。
相关的代码行(cmets中的错误-行号来自原始文件,因此没有cmets中的错误):
ScintillaView.h
// Line 47-49
@protocol ScintillaNotificationProtocol
- (void)notification: (Scintilla::SCNotification*)notification; // 4 errors on this line:
// 1. expected type-specifier
// 2. expected ')'
// 3. expected identifier
// 4. expected ';'
@end
// [snip]
// Line 131
- (void) notification: (Scintilla::SCNotification*) notification; // The exact same errors.
复制这段代码时,我注意到::
运算符在文件中使用了几次,因此解析器只能在某些地方成功匹配它。
再一次,这段代码不是我的,而是取自 Scintilla Cocoa 库。 (更多信息请看这里:http://www.scintilla.org/)
XCode 3.2.6、Mac OS X 10.6.8
【问题讨论】:
您没有使用 Xcode 4.2 有什么原因吗? 你是第三人问这个问题,昨天第二个问这个问题。请参考此评论线程:apple.stackexchange.com/questions/127235/…。 @BlackFrog 即使您的付费 Apple 开发者帐户不是最新的,也可以试试这个 (***.com/questions/10335747/…) @BlackFrog 谢谢,但 4.2 是支持 Snow Leopard 的最后一个版本,而您链接到的问题中最旧的版本是 4.3.2。 发布错误怎么样? 【参考方案1】:添加
typedef tdSCNotification Scintilla::SCNotification
在第一条违规行显示该命名空间中没有名为SCNotification
的类型之前。所以我搜索了包含的头文件(幸运的是,只有三个)namespace Scintilla
。它位于第一个包含的头文件Scintilla.h
中。但它看起来像这样:
#ifdef SCI_NAMESPACE
namespace Scintilla
#endif
和
#ifdef SCI_NAMESPACE
#endif
所以我假设 SCI_NAMESPACE 没有定义。我将#define SCI_NAMESPACE
添加到Scintilla.h
某处在线 45 并且它起作用了。几乎。我收到另一条错误消息:
没有找到框架 Scintilla 命令 /Developer/usr/bin/llvm-g++-4.2 失败,退出代码为 1
我认为这与我如何将框架添加到我的项目中有关,所以它应该是一个单独的问题。
【讨论】:
以上是关于如何让 XCode 构建一个包含 Objective-C++ 的项目?的主要内容,如果未能解决你的问题,请参考以下文章