我最近一直在构建一个Mac OS X应用程序,它利用Core Audio框架来播放一系列渲染色调。
因此,我导入了以下文件:
#import "songComponents.h"
#import "MusicBoxViewController.h"
#import <AudioToolbox/AudioToolbox.h>
#import <AudioUnit/AudioUnit.h>
#import <AudioUnit/AUComponent.h>
#import <AudioUnit/AudioComponent.h>
#import <assert.h>
有趣的是,我收到了以下错误消息:
Undefined symbols for architecture x86_64:
"_AudioComponentFindNext", referenced from:
-[songComponents synthesizeSong] in songComponents.o
"_AudioComponentInstanceNew", referenced from:
-[songComponents synthesizeSong] in songComponents.o
"_AudioUnitSetProperty", referenced from:
-[songComponents synthesizeSong] in songComponents.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这些功能在其头文件中明确定义。因为它们是核心框架的一部分,有没有人知道我是否有特定的方法导入核心文件以使其工作?或者他们可能没有其他原因吗?
(作为一个附加组件:我当前的操作系统是10.7.5 OS X,而XCode是v4.6。我正在调整这个项目来自我发现的一些代码,这些代码是为大约一个iOS项目编写的。 2011版的XCode。我找不到我的做法。)
答案 0 :(得分:1)
头文件中这些函数的定义与链接器无关。
标题只是向编译器提供可用内容的签名。然后链接器必须有相应的二进制库可用于将您自己的调用链接到库中,这可以通过静态链接库(将二进制文件和库物理链接在一起)或动态(您对库的调用正确地重定位到图书馆本身的切入点)
要做到这一点,您只需要在项目中添加相应的框架: