我正在将我的App Delegate文件从.m转换为.mm(从Objective-C到Objective-C ++),以便我可以访问用Objective-C++编写的第三方库。在Objective-C中,我的应用程序委托构建并运行良好。但是当我更改扩展名时,项目会构建,但我会收到链接错误,所有这些错误都是来自我使用的C语言静态库中缺少符号。错误是经典的链接错误,具有以下格式:
“MyFunction(arguments)”,引用自:
-[MyAppDelegate myMethod] in MyAppDelegate.o
找不到符号
所有问题都在应用程序委托对象中。我知道我已准备好编译Objective-C ++,因为我的ViewController文件是.mm。因此,我的问题有几个部分。
首先,这些符号是否真的不存在,以至于我无法使用它们?换句话说,不可能从Objective-C++文件访问普通的C函数吗?如果是这样,那就太不幸了。我认为几乎所有Objective-C代码,特别是所有至少作为.mm构建的Objective-C代码,都是有效的Objective-C ++。我错了吗?
如果不是,请问如何避免这些错误?Objective-C++中是否有不同的头文件规则,我不知道?
感谢您的所有帮助。
“MyFunction(arguments)”,引用自:
-[MyAppDelegate myMethod] in MyAppDelegate.o
找不到符号
所有问题都在应用程序委托对象中。我知道我已准备好编译Objective-C ++,因为我的ViewController文件是.mm。因此,我的问题有几个部分。
首先,这些符号是否真的不存在,以至于我无法使用它们?换句话说,不可能从Objective-C++文件访问普通的C函数吗?如果是这样,那就太不幸了。我认为几乎所有Objective-C代码,特别是所有至少作为.mm构建的Objective-C代码,都是有效的Objective-C ++。我错了吗?
如果不是,请问如何避免这些错误?Objective-C++中是否有不同的头文件规则,我不知道?
感谢您的所有帮助。
extern "C"{
和}
用#ifdef __cplusplus
括起来,以便仍然可以在C中编译。 - JeremyP