1

所以我尝试了一个简单的应用程序来播放一个简单的 mp3,出于某种原因,无论我尝试什么,我都会遇到同样的错误。每当我包含 AVFoundation/AVAudioPlayer 时它就无法运行,它会在我身上崩溃。但是一旦我删除了该框架,它就可以正常工作。请帮忙。

这是我收到的错误..

    ld: warning: ignoring file /Users/nnamdiokeke/Desktop/Play/AVFoundation.framework/AVFoundation, file was built for unsupported file format ( 0xce 0xfa 0xed 0xfe 0x c 0x 0 0x 0 0x 0 0x 9 0x 0 0x 0 0x 0 0x 6 
0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): /Users/nnamdiokeke/Desktop/Play/AVFoundation.framework/AVFoundation
    Undefined symbols for architecture i386:
      "_OBJC_CLASS_$_AVAudioPlayer", referenced from:
          objc-class-ref in ViewController.o
    ld: symbol(s) not found for architecture i386
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

代码粘贴在下面。

头文件

//
//  ViewController.h
//  Play
//
//  Created by Nnamdi Okeke on 9/13/12.
//  Copyright (c) 2012 Nnamdi Okeke. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <AVFoundation/AVAudioPlayer.h>

@interface ViewController : UIViewController <AVAudioPlayerDelegate> {

    AVAudioPlayer *song;
    NSURL *songlink;
}

 @property (nonatomic, retain) AVAudioPlayer *song;

-(IBAction)play:(id)sender;

@end

实施文件

//
//  ViewController.m
//  Play
//
//  Created by Nnamdi Okeke on 9/13/12.
//  Copyright (c) 2012 Nnamdi Okeke. All rights reserved.
//

#import "ViewController.h"
#import <AVFoundation/AVAudioPlayer.h>


@implementation ViewController


- (void)viewDidLoad
{
    songlink = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"A4Hood" ofType:@"mp3"]];
    song = [[AVAudioPlayer alloc] initWithContentsOfURL:songlink error:nil];
    song.delegate = self;
    //[song play];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(IBAction)play:(id)sender {
    songlink = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"A4Hood" ofType:@"mp3"]];
    song = [[AVAudioPlayer alloc] initWithContentsOfURL:songlink error:nil];
    song.delegate = self;
    [song play];


}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end
4

2 回答 2

1

每当我包含 AVFoundation/AVAudioPlayer 时它都无法运行

因为包含头文件是不够的 - 你必须再次链接 AVFoundation.framework,否则动态加载器如何知道从哪里加载不在你的二进制文件中的符号?因此,您必须在 Xcode 中将 AVFoundation 框架添加到您的项目中。

更多关于为什么这在此处是必要的。

于 2012-09-18T06:38:36.447 回答
1

我实际上遇到了同样的问题,编译器对此感到困惑:

#if defined(__cplusplus)
    #define AVF_EXPORT extern "C"
#else
    #define AVF_EXPORT extern
#endif

在 AVAudioSettings 中,此定义被使用,编译器不解释。可能是因为我在我的应用程序中使用了一些 C++ 吗?

测试后,问题就来了。要解决这个问题,请创建另一个包含 AVAudio 的类,并使用您的音频执行您必须做的事情。

似乎 AVAudio 和 C++ 并没有很好。我希望它可以帮助

于 2013-01-30T09:56:54.680 回答