Objective-C++ 导入 C++ 类失败,找不到 cassert

2024-03-06

因此,我想公开公开一个 Box2D (C++) 指针,指向我的 cocos2d + box2d 项目中的其他 Objective-C++ 类。我在接口中声明了一个方法“getWorld”,该方法引用 C++ 类 b2World 并导入 Box2D.h。我的项目中的所有文件都是 .mm 扩展名,我收到以下编译错误:

In file included from DebugDrawLayer.mm:2:
In file included from World.h:10:
In file included from external/Box2d/Box2D/Box2D.h:34:
external/Box2d/Box2D/Common/b2Settings.h:22:10: fatal error: 'cassert' file not found
#include <cassert>

我猜 Box2D.h 以某种方式编译为 C 而不是 C++,但我无法理解这是如何发生的。根据日志,包含链显然是从 .mm 文件开始的。

Update:

日志显示 World.mm(较早编译)它显然编译为 Objective-C++

CompileC Objects-normal/i386/World.o World.mm normal i386 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler 

但对于 DebugDrawLayer.mm 它说 Objective-c

CompileC Objects-normal/i386/DebugDrawLayer.o DebugDrawLayer.mm normal i386 objective-c com.apple.compilers.llvm.clang.1_0.compiler

这两个文件都设置为默认 - Objective-C++ 源。是什么赋予了..?


这似乎是 Xcode4 中的一个主要错误,与编译器设置无关 - 只是 Xcode 内部。


UPDATE:

我最终找到了根本原因。是的,这是 Xcode/LLVM 中的一个错误。它以错误的顺序编译文件,然后覆盖自己的设置,并破坏自身。苹果的技术支持太无能,甚至无法理解这个问题,所以我怀疑他们会很快修复这个错误。

(注意:跳过这一部分,请参阅下面的我原来的答案,它给出了一个暴力但非常快速的解决方案)

发生的情况是……如果编译器“看到”C++ 头文件处理时C 类...然后它将该标头(内部)标记为“C”(即使这实际上是不可能的)。

后来,当它回到那个头文件,尝试用 C++ 编译它时,它发现它已经告诉自己头文件是“C”(因为它非常愚蠢)......并立即崩溃。

The correct解决方案(需要大量的时间和精力)是检查项目中的每个 C 文件,并检查(手动,因为 Xcode 很糟糕)对每个头文件的每个引用 - 并且对于每个头文件,它导入的每个头文件。 .. ETC。

(这可能需要几个小时)

...直到找到导致 C 文件“看到”C++ 标头的导入链。

所有这些都应该是自动化的(但事实并非如此)。并且根本问题不应该发生(如果 Xcode 编写正确的话)。


我尝试了网络上其他地方列出的所有内容,大多数解决方案都是“不断删除/添加文件,如果幸运的话,最终 Xcode 会自行修复”。

我并不幸运。唯一有效的是:

  1. 转到项目的构建设置
  2. 找到“将源编译为”设置
  3. 将其设置为“Objective-C++”
  4. re-build

实际的名称/值是:“GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp” - 所以我的猜测是这回避了 Xcode 的(损坏的!)内部逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective-C++ 导入 C++ 类失败,找不到 cassert 的相关文章

随机推荐

  • FileProvider 崩溃 - npe 尝试对 null 字符串调用 XmlResourceParser

    这是我的清单的一部分
  • 如何扩展现有的docker镜像?

    我在用着官方的elasticsearch Docker 镜像 https hub docker com r elasticsearch 而不是设置我自己的弹性搜索实例 这非常有效 直到我想扩展它为止 我想安装marvel http www
  • VBScript 发送键“

    我有一个 VBScript 可以取消订阅所有 Steam 创意工坊对象 Code Set WshShell WScript CreateObject WScript Shell WshShell AppActivate Steam Comm
  • 如何选择 cypress 自动完成字段

    我如何在 cypress 中选择自动完成字段 该字段如下所示 这是 HTML 代码 div class mui select span style color rgb 51 51 51 font family none font size
  • 有没有更好的方法使用 Dash by Plotly 执行多重输出?

    正如我们所看到的入门的互动部分 https plot ly dash getting started part 2 interactivity 一个回调函数可以接受多个输入 但始终只有一个输出 假设我们有两个单独的块 它们必须在输入更改后更
  • 数组“__curl_rule_01__”的大小为负数

    我在尝试编译 GIT 时遇到错误 我已经在 Google 和 GIT 源代码问题 错误中搜索了类似的问题 但没有找到任何可以帮助我的内容 最初我收到以下错误 root teemo usr src git make prefix usr in
  • 使用 Swift 3.0 将 JSON 数组解析到服务器

    我正在尝试将 JSON 数组发送到 Web 服务器 我在网上看了几个例子 即 and 使用 Swift 3 0 将 CoreData 保存到 Web 服务器 https stackoverflow com questions 4619996
  • 使用前缀或域的路由

    我正在开发一个平台 该平台允许用户在主网站域的子文件夹中运行自己的网站 或者为其网站映射自定义域 使用自定义域时 每个路由的 URL 结构略有不同 因为它以用户名为前缀 但使用自定义域时 不使用此前缀 有没有一种巧妙的方法可以在我的 Rou
  • 通过递归得出帕斯卡三角形

    有人可以告诉我我当前的代码是否可行吗 我必须使用输入创建帕斯卡三角形 而不使用任何循环 我注定要递归 我花了三天时间来做这个 这是我能想到的最好的输出 def pascal curlvl newlvl tri if curlvl newlv
  • R 中向量的子集()

    我根据以下函数编写了subset 我觉得很方便 ss lt function x subset r lt eval substitute subset data frame x parent frame if is logical r st
  • 将 JSON 解析为 MONGODB 文档

    我是新来的JAVA and MONGODB并且一直在学习尝试并了解这些技术是否能够满足我对产品的要求 我目前陷入无法插入文档 记录 的地步JAVA进入我的MONGODB收藏 我正在使用新的MONGODB version 3 0 到目前为止的
  • 如何在heroku 上托管我的discord.py 机器人?

    我目前正在尝试将我的 Discord 机器人连接到 Heroku 并 24 7 托管它 但我遇到了问题 我将我的机器人上传到 githubhttps github com zemocode flankebot tree master htt
  • 如何更改 .net Web 应用程序中的默认区域性设置?

    我们的 Web 应用程序 net C 使用 amount ToString c 格式化货币金额 显示为几个不同区域的本地化 我们的法裔加拿大用户更喜欢所有金额均采用美国格式 123 456 99 而 fr CA 的默认 Windows 格式
  • Android中如何将日志写入SD卡? [复制]

    这个问题在这里已经有答案了 我的程序在设备中崩溃 我想在我的设备中运行时准确捕获程序的日志 即我想将日志写入我的 SD 卡 直到崩溃为止 我怎样才能实现这个目标 尝试这个 Thread setDefaultUncaughtException
  • 从模块关闭用户窗体

    我正在尝试从模块关闭用户表单 但它不起作用 这是我尝试过的 Sub UpdateSheetButton Dim subStr1 As String Dim subSrrt2 As String Dim tmp As Integer Dim
  • Android Flash 切换按钮崩溃

    应用程序在四种不同的设备上运行良好 但客户端在打开 关闭闪光灯按钮时面临崩溃Xperia z2 主要活动 btnFlash setOnClickListener new OnClickListener Override public voi
  • 需要 Nest REST API 的工作示例而不使用 Firebase API

    我正在努力寻找一个使用普通休息将数据写入 Nest Thermostat API 的工作示例 尝试编写 C 应用程序但无法使用 Firebase 到目前为止发布的多个 Curl 示例不起作用 我有一个有效的 auth token 并且可以毫
  • 为分配/指派问题建立线性规划

    我在线性程序方面遇到了一些麻烦 我已经解决并使用 Excel 但现在我想在 R Python 中执行它 因为我已经达到了 Excel 和求解器的限制 因此 我就这个特定主题寻求帮助 我通过改变 lp assign 函数尝试使用 lPsovl
  • 需要在 web.config 中加密连接字符串和 stmp 信息

    我想在 web config 中保留加密的连接字符串和 stmp 信息 我可以将连接字符串和 SMTP 信息加密存储在 web config 中 并在其中解密和使用吗 OR 我可以加密连接字符串和 SMTP 并保存在 web config
  • Objective-C++ 导入 C++ 类失败,找不到 cassert

    因此 我想公开公开一个 Box2D C 指针 指向我的 cocos2d box2d 项目中的其他 Objective C 类 我在接口中声明了一个方法 getWorld 该方法引用 C 类 b2World 并导入 Box2D h 我的项目中