gpt4 book ai didi

c++ - 与 .mm 源链接时 ObjC 框架的 undefined symbol

转载 作者:行者123 更新时间:2023-11-30 16:34:45 25 4
gpt4 key购买 nike

我有一个来自第 3 方的框架,它已在其 .m 文件中实现了此功能,并在其框架 header 中声明:

无效foo();

当我在 .mm 中使用它时,我收到 foo() 的 undefined symbol 错误。

我知道将上述声明包含在外部“C”的第三方 header 中可以解决链接器错误。

但是,问题是为什么在我的 .mm 或关联 header 中包含框架 header 的 #include 不能解决该问题?另外,.mm 找不到 foo() 的符号是什么原因?

最佳答案

当您使用 .m 进行编译时,foo 将被视为 C 符号。而使用 .mm 文件扩展名会告诉 Xcode 将文件视为 Objective-C++ 文件。如果您转到文件检查器,您应该会看到类似这样的内容。

enter image description here

在这种情况下,foo 会经历名称修改,这在 C++ 中是必要的,因为相同的标识符(在本例中为 foo)可以以多种方式使用(例如,函数重载) )。

由于您将 header 包含在 .mm 中,因此它被视为 Objective-C++。您需要 extern "C" 来防止 foo 被破坏,这将使链接器能够使用框架中的正确符号名称。

关于c++ - 与 .mm 源链接时 ObjC 框架的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49198546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com