I'm porting a server application we made originally in Windows using juce to Linux. It works as a dynamic lib that the server loads. I'm using cmake, not introjucer to manage my project because I need too many complex features to build other components that it would be hard to make it work using introjucer alone. We have modifications to juce that we maintain in our own git repo that I merge the official one into, but they're fairly minimal (and I'm willing to share them with Jules, but that's a separate issue).
So anyway, using introjucer on the juce introjucer project (builds/JUCE.introjucer), if I add a Linux Makefile, it just generates a static lib but I want a shared object (which is how I do it in Windows, dll). I manually edited the generated Makefile and added -fPIC to CFLAGS and -shared to the LDFLAGS. Changing the introjucer project to shared had no effect on the generated Makefile so I had to do this manually.
So when I load the dynamic lib, I get this:
undefined symbol: _ZThn232_N4juce19AudioProcessorGraph17handleAsyncUpdateEv
Other symbols it can find. Running nm on libJUCE.so, I see that it does have AudioProcessorGraph::handleAsyncUpdate in it:
The number in the name mangling is slightly different, 240 vs. 232. I don't know what that means, but if I use c++filt on these, they both look identical when unmangled:
non-virtual thunk to juce::AudioProcessorGraph::handleAsyncUpdate()
So if anyone is a guru at name mangling or compiling JUCE as a shared lib in Linux, it would help if they had any suggestions. I'm totally stuck.