AAX libc++ Library

In the recent AAX SDK 2.2.0, an update to the AAXLibrary Xcode project has changed the name of certain library files that are created.

Building the library using the "libc++ (LLVM C++ standard library with C++11 support)" option outputs a file named AAXLibrary_libcpp.a, whereas building the library with the "libstdc++ (GNU C++ standard library)" option outputs a file with the original name (AAXLibrary.a).

As far as I can tell, in the IntroJucer's current state, the new library name is not supported.

Is there support for this new library name within the IntroJucer? If not, is it likely that there will be?

I feel it is bad practice to just rename the library to conform to what the IntroJucer expects. It would be nice if there was a place where the library name could be specified or changed from default.



We are looking into a fix for this. In the meantime, I prefer to use a symlink to the correct filename. This way you do not need to rename the library if you need to rebuild the AAXLibrary.

I think the best way would be: (I'd patch it but since you already got the main repo it's waste of time)

  • If OS X Deployment Target 10.7>= and/or C++ Library is LLVM libc++ then
  • if (file - "libAAXLibrary_libcpp.a") exists
    • use it!
  • else
    • fall back to libAAXLibrary.a


  • just use libAAXLibrary.a

This should be compatible also with current workflow and future one.
I'd also suggest doing that for PluginLibrary (RTAS) to allow supporting older products without switching between libraries...

Here's the patch for this:


(EDIT: fixed patch)

Introjucer uses the appropriate libAAXLibrary and libPluginLibrary _libcpp.a versions as necessary.

The RTAS SDK, unlinke the AAX SDK, does not have the libcpp configuration out of the box, but one should be created to be similar to the AAX SDK.

Cheers, Yair

Hi yairadix,

Thank you for the patch. However, I think the if needs to be the other way around. Otherwise XCode won't find the AAX library if you select "Default" for "C++ Library" in the Introjucer:

for (ProjectExporter::ConfigIterator config (exporter); config.next();)
    const String libName (
        config->getValue (Ids::cppLibType) == "libstdc++"
        ? "libPluginLibrary.a"
        : "libPluginLibrary_libcpp.a");
    if (config->isDebug())
        exporter.xcodeExtraLibrariesDebug.add   (rtasFolder.getChildFile ("MacBag/Libs/Debug/" + libName));
        exporter.xcodeExtraLibrariesRelease.add (rtasFolder.getChildFile ("MacBag/Libs/Release/" + libName));

Can you confirm that the above code works for you as well? If yes, then I'll merge it in.


Perhaps which library is the default depends on the SDK version and/or the deployment target.

Because for me it seemed like the default is one value and for you another value, so we should check extensively what is the default depending on different SDK/deployment values and use that behavior in Introjucer/Projucer.

We don't need to guess, Rob from Avid explained it there in the forum https://developer.digidesign.com/phpbb/viewtopic.php?f=90&t=1510&sid=9f55e7b9703d2060663976ec3218c2b5#p6309
 Those who are enrolled at the Avid program can look it up there, the others without the AAX SDK won't bother, but to summarize:

AAXLibrary.a is the one linked against lib-stdc++ (STL of g++) and AAXLibrary_libcpp.a is linking against libc++ (i.e. STL for Apples LLVM compiler).

They both exist as separate targets in the SDK and you can switch by selecting one or another Scheme.

The destinction was introduced recently and they plan to keep the names like that. You simply make sure to select the one matching the compiler you use for your projects.

So one year later…
no use of libAAXLibrary_libcpp.a ?

@chkn I remember it was added to JUCE.
On SoundRadix repo we have it for RTAS and AAX. works well.

Update: you’re right! it was never added to JUCE.
We simply have this for RTAS/AAX in Projucer Exporter:

        const String libName (
            confIter->config[Ids::cppLibType] == "libc++"
            ? "libAAXLibrary_libcpp.a" : "libAAXLibrary.a");

A fix for this will be on develop in a few minutes.

1 Like

Great. Too bad that it took over a year since I’ve added the fix in the SR branch. This lag makes merging much more difficult, as well as checking for correctness, because after so long it’s quite hard to remember what it was all about :confused:

Also note that might be nice to integrate the RTAS code,
currently there’s addExtraRTASTargetSettings() which is redundant with newer method:

Thanks! I’ve cleaned it up.

FFS This has just broken my builds with JUCE5 which I’m just moving some stuff too! Can people stop renaming f***ing files. The whole /App/ /VST/ sub-folders didn’t help either. Nor ‘The Introjucer.exe’ —> “Introjucer.exe” —> “Projucer.exe”

We had a perfect balancing act where the build scripts built libAAXLibrary.a but with the libc++ library, and everything was working just fine.



With this one we really just followed the filename re-naming with newer AAX SDKs.

I know :slight_smile: Doesn’t mean it doesn’t hurt :slight_smile:

What is the exact change @jimc? I am currently having an issue with building my AAX and had a quick peek to the forum if someone has reported something AAX related with 5.2.0.

If you are using libc++, rather than the gnu one, on OSX then JUCE used to link with libAAXLibrary.a but now looks for libAAXLibrary_libcpp.a.

The error should be fairly obvious in the build log.

You can build libAAXLIbrary_libcpp.a by going into the Mac Build folder in the AAX library and doing xcodebuild -alltargets IIRC

1 Like

Oh yeah, I fixed that earlier. Thanks.
Now I am looking at an issue on Windows, where I get LNK1104 error that it can’t open the .lib static library of the AAX sdk, during linkage.

1 Like

It seems as if you are on old AAX SDK versions? Please update to the latest version (2.3.0) and you will also not have any issues with the naming of the AAX library.