【问题标题】:C++ imported library not compiled correctlyC++ 导入的库未正确编译
【发布时间】:2014-07-23 22:28:45
【问题描述】:

我在我的 Xcode 项目中包含了一个静态库的头文件(taglib.a 用于解析文件系统上的音乐文件)。

该库是用 C++ 编写的。 Xcode 中的编译器似乎认为它是一个 Objective-C 库。

我在包含的头文件中得到这个编译错误:taglib.h

Unknown type name 'namespace'

通常对于此类问题,解决方案是将文件的扩展名更改为.mm,以告知编译器不仅是objective-C,而且在这种情况下它是一个头文件。它是导入库的标题,甚至在我的项目树中。

如何解决?

使用库的文件 (#import "taglib/taglib.h")

【问题讨论】:

  • 解决方案将实现文件从.m更改为.mm。发生错误是因为 .m 文件正在查看 C++ 头文件。
  • @trojanfoe 我想我在问题中写得很清楚,我无权访问 m 文件,因为这是一个静态库,而错误发生在标题中。
  • 你的问题是“我的 Xcode 项目”,所以我假设你可以访问所有的实现文件。
  • 您可能在某处包含标题
  • 编译器不编译头文件;它编译包含头文件的实现文件。

标签: c++ objective-c xcode cocoa


【解决方案1】:

将其设置为 C++ 标头。会好的。

【讨论】:

  • 我已在问题中添加了屏幕截图。
【解决方案2】:

在您看到错误的地方,包含有问题的 .h 文件必须使用 c++ 编译器编译,因此如果您有 main.m,则需要将其更改为 main.mm - 如果您有 foo .c 您需要将其更改为 foo.cpp - 这不是免费的,因为现在您生活在该编译单元的 c++ 土地上......所以另一种方法是制作一个处理 c++ 库的 ObjC++ 类......然后你有更多的纯 c 编译单元。

【讨论】:

  • 我只是在我的 iPhone 上看过它,所以我没有注意到 17 cmets。
  • 如果您在 17 cmets 后找到答案,您可以回答自己的问题并接受它...提供一个好的答案比分数更重要,特别是如果评论者解决了您的问题问题,从不回答。
【解决方案3】:

问题已通过重启 xCode 解决。

【讨论】:

  • 你需要多久重启一次 Xcode?每次创建一个新的实现文件?我认为这不太可能解决将 C++ 头文件包含到 Objective-C++ 实现中的问题,并且让我认为当我们就您的问题交换 cmets 时,您正在对项目进行更改。至少在 Objective-C++ 中使用 C++ 库时,我不必重新启动 Xcode...
  • 是的,这个答案确实没有捕捉到任何解决方案......解决方案是将编译单元更改为 C++/ObjC++ 并且直到您重新启动 Xcode 后才发生,因为xcode 中的缺陷
  • 同意;我相信 OP 不想承认我的第一条评论解决了这个问题 :D (同时进行 Clean 可能会避免重新启动 Xcode 的需要)。
  • @GradyPlayer 大家好,我真的不想继续这场辩论。但是,如果您准备好我的问题,您会看到我已经“将 .m 扩展名更改为 .mm。我已经发布了问题 *after 重命名它。您的解决方案已经在我的问题中(看最后一张截图)。
  • @trojanfoe 别担心,我承认你知道你的东西!
猜你喜欢
  • 1970-01-01
  • 2019-02-12
  • 2013-02-08
  • 2018-07-22
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
相关资源
最近更新 更多