繁体   English   中英

在Cocoa iPhone App中使用C ++文件

[英]Use a C++ file in Cocoa iPhone App

我正在尝试在我的应用程序中使用示例iPhone应用程序AQOfflineRenderTest的功能(该应用程序并不重要,我只是觉得值得一提)。 我有一个C ++文件,其方法称为:

    void DoAQOfflineRender(CFURLRef sourceURL, CFURLRef destinationURL)

我正试图从我的Cocoa Objective-C类中调用它。 我上面引用的示例应用程序通过在头文件中声明方法来做到这一点,如下所示:

    - (IBAction)doSomethingAction:(id)sender;
    @end
    void DoAQOfflineRender(CFURLRef sourceURL, CFURLRef destinationURL);

在实现文件中,我调用doSomethingAction,后者调用renderAudio并执行相同的代码:

    DoAQOfflineRender(sourceURL, destinationURL);

当我执行时,出现错误:_DoAQOfflineRender“,引用自:myViewController.o中的-[myViewController renderAudio]符号未找到collect2:ld返回1退出状态

我是否缺少对此C ++类的引用? 它没有在示例应用程序中指定一个,但可以运行。

请帮忙,谢谢!

您缺少的是DoAQOfflineRender的实现-您是否忘记了在定义此例程的库中链接?

似乎您使用.m作为Objective-C源文件的扩展名,因此编译器认为您正在引用C函数。 尝试将扩展名更改为.mm。

要从C或Objective-C文件调用C ++函数,必须在C ++中使用extern "C"链接进行声明。

#if __cplusplus
extern "C" {
#endif

void DoAQOfflineRender(CFURLRef sourceURL, CFURLRef destinationURL);

#if __cplusplus
}
#endif

原因是C ++函数的名称是通过对类型进行编码来修改的,因此具有相同名称但签名不同的函数将成为不同的符号。 例如, DoAQOfflineRender(CFURLRef, CFURLRef)变为__Z17DoAQOfflineRenderPK7__CFURLS1_而没有extern "C" ,但_DoAQOfflineRender ,这正是C / Objective-C的期望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM