Symbol collision with Audio Unit plugins, sandboxing
Symbol collision with Audio Unit plugins, sandboxing
- Subject: Symbol collision with Audio Unit plugins, sandboxing
- From: Thomas Thiriez <email@hidden>
- Date: Mon, 28 Sep 2009 00:15:20 +0200
Hello,
I am developing a Core Audio host application, and am having a
problem with symbols from Audio Unit plugins colliding with my own.
The problem first appeared with an audio unit that used the
CoreAudioSDK, maybe a different version, or compiled with a different
set of defines or incompatible compiler options. When my code called a
function from the CoreAudioSDK, it actually called the version from
the plugin that was loaded, and lead to a crash. I could fix this by
putting my own CoreAudioSDK in a namespace.
Now, I have the problem with a plugin that uses boost, like me, and
crashes on launch because of a symbol collision. I could work around
this one by:
- Linking statically to boost,
- Telling the compiler with "-unexported_symbols_list" not to export
the symbols that were colliding with the plugin.
I don't really like this solution, because I may have to do this with
the 17 other dylibs I am using, most of them being LGPL.
I was hoping there would be a more elegant solution to this problem.
One solution I am seriously considering, independently from the
problem above, is to sandbox the Audio Units, having each Audio Unit
run in its own thread. This would completely solve the problem, with
the added benefit of not crashing the whole application when an Audio
Unit messes up, and the ability to load 32bit plugins, even when the
host is running 64bit.
Has this been done before?
One tricky part I can see is how to integrate the GUI from an Audio
Unit running in a separate process into my own application. Is this
doable?
Thanks for your help,
Thomas
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden