I use IPP within a music production plugin (see here). These types of executables are provided as dynamic libraries that are loaded by host applications (e.g. this or this as examples). I have some signal processing functions compiled into my binaries, and all is good. Except in a few cases where the host applications also use IPP, and they use a different version to me. For years I've used IPP v6, a host vendor got in touch saying they were using IPP v8 and that my plugin crashed within their host. So I updated my plugin to IPP v8, and that fixed the issue, and now my plugin crashes in other hosts (which I know use IPP because I've looked into their binaries and can see the IPP symbols and the date of their binary suggests that they probably are not using IPPv8). Crashes can be on IPP functions, or seemingly anywhere else.
This problem only happens on my OS X builds (I also have a Windows version).
So, I suspect some kind of symbol conflict. I have run to the limit of my understanding here, but what I assume is happening is something like I am loading IPP code into the address space of a host that also uses the same IPP functions, but since they're a different version and now two or more of the same thing are loaded, there is some confusion as to which code to use as it's using the same names and I am calling their functions and they are calling mine, thing nasty goes wrong, and it crashes either then or somewhere down the line.
The only solution I can see is to somehow do some kind of name-spacing, where my IPP functions are actually called something else, so there is no chance of confusion. Can I do that? If so, how do I do that on OS X (I'm using XCode 5, IPP 8.0.0 update 1, llvm 5). Or is there another solution to this kind of thing?