使用.cpp文件的xcode iphone程序:找不到符号

时间:2009-12-24 03:15:11

标签: iphone

这让我发疯了......

我有一个使用Apple示例cpp文件的iPhone应用程序。 cpp文件是aqofflinerender.cpp。

当我编译Apple示例项目AQOfflineRenderTest时,它正确编译。当我将aqofflinerender.cpp文件复制到我的项目并在文件中引用与Apple示例完全相同的方法时,我收到以下错误:

    cd /Users/mike/Documents/xcode/insultthem
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.0
    setenv MACOSX_DEPLOYMENT_TARGET 10.5
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk "-L/Users/mike/XCode Projects/Debug-iphoneos" "-F/Users/mike/XCode Projects/Debug-iphoneos" -filelist "/Users/mike/XCode Projects/insultthem.build/Debug-iphoneos/insultthem.build/Objects-normal/armv6/insultthem.LinkFileList" -mmacosx-version-min=10.5 -Wl,-dead_strip -miphoneos-version-min=3.0 -framework Foundation -framework UIKit -framework CoreGraphics -framework AVFoundation -framework SystemConfiguration -framework AudioToolbox -framework CoreData -framework MessageUI -framework IOKit -o "/Users/mike/XCode Projects/Debug-iphoneos/insultthem.app/insultthem"
Undefined symbols:
  "_DoAQOfflineRender", referenced from:
      -[AudioFileManipulation combineFiles:newFileName:] in AudioFileManipulation.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

在.m文件中,方法定义如下:

extern void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL);

在.cpp文件中,方法如下:

void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL) {

有没有人有解决这个问题的建议?

3 个答案:

答案 0 :(得分:3)

好的......想出来....根据另一篇文章,在aqofflinerender.cpp文件中,我将函数包围如下:

#if __cplusplus
extern "C" {
#endif

void DoAQOfflineRender(CFURLRef sourceURL, CFURLRef destinationURL) 
{
...
}


#if __cplusplus
}
#endif

很奇怪....因为它在没有#if __cplusplus行的Apple示例中有效。猜测我的项目中缺少编译器选项...

这些行告诉编译器将函数名称导出为符号,以便其他类可以“看到”该函数。

答案 1 :(得分:0)

Apple代码是否也附带包含文件?通常,Apple制作的示例代码总是有一个包含文件 如果有该文件,我认为你也需要使用它。

答案 2 :(得分:0)

您是否尝试过将.cpp文件更改为.mm文件?我隐约记得那些当编译器期望混合使用objective-c和c ++时编译器所期望的东西。