C++ 如何解决Objective-C+;中出现的链接错误+;但不是客观的C?

C++ 如何解决Objective-C+;中出现的链接错误+;但不是客观的C?,c++,iphone,c,objective-c,objective-c++,C++,Iphone,C,Objective C,Objective C++,我正在将我的应用程序代理文件从.m转换为.mm(Objective-C转换为Objective-C++),以便访问用Objective-C++编写的第三方库。在Objective-C中,我的应用程序代理构建并运行良好。但是,当我更改扩展时,项目会生成链接错误,所有这些错误都是我使用的C语言编写的静态库中缺少的符号。这些错误是具有以下格式的经典链接错误: “MyFunction(参数)”,引用自: -MyAppDelegate.o中的[MyAppDelegate myMethod] 找不到符号 所

我正在将我的应用程序代理文件从.m转换为.mm(Objective-C转换为Objective-C++),以便访问用Objective-C++编写的第三方库。在Objective-C中,我的应用程序代理构建并运行良好。但是,当我更改扩展时,项目会生成链接错误,所有这些错误都是我使用的C语言编写的静态库中缺少的符号。这些错误是具有以下格式的经典链接错误:

“MyFunction(参数)”,引用自:

-MyAppDelegate.o中的[MyAppDelegate myMethod]

找不到符号

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

首先,从我不能使用的意义上说,这些符号真的不存在吗?换句话说,难道不能从Objective-C++文件访问普通的旧C函数吗?如果这是真的,那就太不幸了。我认为几乎所有的Objective-C代码,当然还有所有至少构建为.mm的Objective-C代码,都是有效的Objective-C++。我错了吗

如果没有,你知道我如何防止这些错误吗?在Objective-C++中是否有我不知道的不同的头规则


<>谢谢所有的帮助。

< P>链接错误的混合C++ + C或C++ + Objule- C程序通常是由于C++名称的限制。确保所有适当的声明都附有
extern“C”
,并且所有代码都同意链接。也就是说,确保函数定义及其使用位置都可以看到
extern“C”
extern“C++”

在您的特定情况下,看起来 MyFalm()/Cuth>用C++链接编译,名称被损坏,但是您的<代码> MyMeals>代码> Objto-C文件试图链接未加密的名称。< /P>
这是一个指向维基百科文章的链接。

extern C
围绕你的标题

这告诉链接器库中的函数名没有得到C++名称的修改。 例如:


在头中包含这个,而不是在包含的.t.t.tC附近,为什么他不需要时就污染了头文件,这样他就可以在任何C++源文件中使用它,而不污染源文件。当然,他必须将
外部“C”{
}
#ifdef_uucplusplus
包围起来,这样它仍然可以用C编译。
 extern "C" {
   #include "my-lib.h"
 }