How to compile Core Audio Utility Classes?

Hi there,


I'm trying to get into audio programming with Core Audio. I'm no stranger to Audio Programming and the C++ language.

Currently I have downloaded the latest version of the CoreAudioUtilityClasses, put them in a group(copied into the project folder) in XCode and tried to make a simple AudioInfo struct with a CAStreamBasicDescription object.

When I try to compile I get linker errors:


Undefined symbols for architecture x86_64:
  "_AddEventTypesToHandler", referenced from:
      CarbonEventHandler::WantEventTypes(OpaqueEventTargetRef*, unsigned int, EventTypeSpec const*) in CarbonEventHandler.o
  "_CallNextEventHandler", referenced from:
      AUCarbonViewControl::HandleEvent(OpaqueEventHandlerCallRef*, OpaqueEventRef*) in AUCarbonViewControl.o
  "_GetEventClass", referenced from:
      AUCarbonViewControl::HandleEvent(OpaqueEventHandlerCallRef*, OpaqueEventRef*) in AUCarbonViewControl.o
      AUPropertyControl::HandleEvent(OpaqueEventHandlerCallRef*, OpaqueEventRef*) in AUCarbonViewControl.o
  "_GetEventKind", referenced from:
      AUCarbonViewControl::HandleEvent(OpaqueEventHandlerCallRef*, OpaqueEventRef*) in AUCarbonViewControl.o
      AUPropertyControl::HandleEvent(OpaqueEventHandlerCallRef*, OpaqueEventRef*) in AUCarbonViewControl.o
  "_GetEventParameter", referenced from:
      AUCarbonViewControl::HandleEvent(OpaqueEventHandlerCallRef*, OpaqueEventRef*) in AUCarbonViewControl.o
  "_GetMainEventLoop", referenced from:
      AUCarbonViewBase::CreateEventLoopTimer(float, float) in AUCarbonViewBase.o
  "_InstallEventHandler", referenced from:
      CarbonEventHandler::WantEventTypes(OpaqueEventTargetRef*, unsigned int, EventTypeSpec const*) in CarbonEventHandler.o
  "_InstallEventLoopTimer", referenced from:
      AUCarbonViewBase::CreateEventLoopTimer(float, float) in AUCarbonViewBase.o
  "_RemoveEventHandler", referenced from:
      CarbonEventHandler::~CarbonEventHandler() in CarbonEventHandler.o
  "_vDSP_create_fftsetup", referenced from:
      CASpectralProcessor::CASpectralProcessor(unsigned int, unsigned int, unsigned int, unsigned int) in CASpectralProcessor.o
  "_vDSP_ctoz", referenced from:
      CASpectralProcessor::DoFwdFFT() in CASpectralProcessor.o
  "_vDSP_destroy_fftsetup", referenced from:
      CASpectralProcessor::~CASpectralProcessor() in CASpectralProcessor.o
  "_vDSP_fft_zrip", referenced from:
      CASpectralProcessor::DoFwdFFT() in CASpectralProcessor.o
      CASpectralProcessor::DoInvFFT() in CASpectralProcessor.o
  "_vDSP_maxmgv", referenced from:
      CASpectralProcessor::GetMagnitude(AudioBufferList*, float*, float*) in CASpectralProcessor.o
  "_vDSP_minmgv", referenced from:
      CASpectralProcessor::GetMagnitude(AudioBufferList*, float*, float*) in CASpectralProcessor.o
  "_vDSP_vadd", referenced from:
      CASpectralProcessor::OverlapAddOutput() in CASpectralProcessor.o
  "_vDSP_vmul", referenced from:
      CASpectralProcessor::DoWindowing() in CASpectralProcessor.o
  "_vDSP_vsma", referenced from:
      AUPannerBase::BypassRender(unsigned int&, AudioTimeStamp const&, unsigned int) in AUPannerBase.o
  "_vDSP_vsmul", referenced from:
      CASpectralProcessor::DoInvFFT() in CASpectralProcessor.o
  "_vDSP_ztoc", referenced from:
      CASpectralProcessor::DoInvFFT() in CASpectralProcessor.o
  "_vDSP_zvabs", referenced from:
      CASpectralProcessor::GetMagnitude(AudioBufferList*, float*, float*) in CASpectralProcessor.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I really don't understand what the problem is and how I could solve it. I know the CAUC's haven't been updated for years, but I have come to understand that they are still widely used.

Is there something I'm missing?

Accepted Reply

You're not linking against the required frameworks. The vDSP symbols should be resolved by adding "-framework Accelerate" to the link command. The Carbon stuff is probably useless. It's very deprecated and isn't supported for 64-bit. The best bet is to just not attempt to build those source files or link those object files.

Replies

You're not linking against the required frameworks. The vDSP symbols should be resolved by adding "-framework Accelerate" to the link command. The Carbon stuff is probably useless. It's very deprecated and isn't supported for 64-bit. The best bet is to just not attempt to build those source files or link those object files.

Thanks! I removed the Carbon files and added the Accelerate.framework to the project. Compiled straight away!