如何解决Objective-C++中出现的链接错误,而不解决Objective-C中出现的链接错误?

Luk*_*uke 4 c c++ iphone objective-c objective-c++

我正在将我的App Delegate文件从.m转换为.mm(Objective-C到Objective-C++),以便我可以访问用Objective-C++编写的第三方库.在Objective-C中,我的app委托构建并运行良好.但是当我更改扩展时,项目构建并且我得到链接错误,所有这些都是我用C编写的静态库中缺少的符号.错误是经典链接错误,格式如下:

"MyFunction(arguments)",引自:

- MyAppDelegate.o中的[MyAppDelegate myMethod]

未找到符号

所有问题都在app delegate对象中.我知道我已经准备好编译Objective-C++,因为我的ViewController文件是.mm.所以我的问题有几个部分.

首先,这些符号真的不存在,因为我不能使用它们吗?换句话说,是不是可以从Objective-C++文件访问普通的旧C函数?如果这是真的,那很不幸.我认为几乎所有的Objective-C代码,以及至少构建为.mm的所有Objective-C代码都是有效的Objective-C++.我错了吗?

如果没有,任何想法如何防止这些错误?是否存在Objective-C++中我不了解的标题规则?

感谢您的帮助.

Car*_*rum 8

链接错误与混合C++/C或C++/Objective-C程序通常是由于C++名称修改.确保您已extern "C"附加所有适当的声明,并且所有代码都同意链接.也就是说,确保函数定义及其使用的位置都可以看到extern "C"extern "C++".

在您的特定情况下,它看起来像是MyFunction()使用C++链接编译并且其名称被破坏,但是您的myMethodObjective-C文件正在尝试链接到未编码的名称.

这是一个关于名称修改的维基百科文章的链接.