标签: c++ objective-c c xcode
我有一个来自第三方的框架,它在他们的.m文件中实现了这个功能,并在他们的框架头中实现了十进制:
void foo();
当我在.mm中使用它时,我得到foo()的未定义符号错误。
我知道在extern“C”的第三方标题中包含上述声明可以解决链接器错误。
然而,问题是为什么不在我的.mm或相关头中包含框架头的#include来解决它? 另外,.mm?
答案 0 :(得分:0)
使用.m进行编译时,foo将被视为C符号。而使用.mm文件扩展名告诉Xcode将该文件视为Objective-C ++文件。如果你去File Inspector,你会看到类似的东西。
foo
在这种情况下,foo经历名称修改,这在C ++中是必需的,因为相同的标识符(在这种情况下为foo)可以多种方式使用(例如,函数重载)。
由于您在.mm中包含标题,因此将其视为Objective-C ++。您需要extern "C"来防止foo被破坏,这将使链接器能够使用框架中正确的符号名称。
extern "C"