Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.cpp文件的xcode iphone程序:找不到符号_Iphone - Fatal编程技术网

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

使用.cpp文件的xcode iphone程序:找不到符号,iphone,Iphone,这让我抓狂 我有一个iPhone应用程序,它使用了一个Apple示例cpp文件。cpp文件为aqofflinerender.cpp 当我编译苹果示例项目AQOfflineRenderTest时,它编译正确。当我将aqofflinerender.cpp文件复制到我的项目中并引用文件中与Apple示例完全相同的方法时,我得到以下错误: cd /Users/mike/Documents/xcode/insultthem setenv IPHONEOS_DEPLOYMENT_TARGET

这让我抓狂

我有一个iPhone应用程序,它使用了一个Apple示例cpp文件。cpp文件为aqofflinerender.cpp

当我编译苹果示例项目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);
void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL) {
#if __cplusplus
extern "C" {
#endif

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


#if __cplusplus
}
#endif
在.cpp文件中,方法如下所示:

extern void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL);
void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL) {
#if __cplusplus
extern "C" {
#endif

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


#if __cplusplus
}
#endif

有人对解决这个问题有什么建议吗?

苹果的代码不是也附带了一个include文件吗?通常,来自苹果的示例代码总是包含一个include文件。

如果存在该文件,我想您也需要使用它。

您是否尝试过将.cpp文件更改为.mm文件?我模糊地记得当编译器有Objy-C和C++的时候,编译器会期望这样的东西。算出了。。。。根据另一篇文章,在aqofflinerender.cpp文件中,我对函数进行了如下包围:

extern void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL);
void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL) {
#if __cplusplus
extern "C" {
#endif

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


#if __cplusplus
}
#endif
奇怪。。。。因为它在苹果的例子中没有#if u cplusplus行。猜测我的项目中缺少编译器选项


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

否——苹果代码中没有包含(这太容易了!!哈哈哈)我在苹果项目中的代码上搜索了cpp文件名和特定函数。我的源文件中的位置与Apple源文件中的位置相同……函数
DoAQOfflineRender()
在aqofflinerender.cpp中定义。你有没有试着将文件的内容移动到你的文件中?只是试着将其重命名为.mm,同样的问题仍然存在。令人沮丧的是,苹果的示例代码没有问题——我只是将其复制到我的应用程序中。我还在整个示例代码中搜索文件名和符号名的实例。我的代码中有me引用。我一直在查看构建配置,但找不到任何明显不同的东西。