I resolved the bugs with OpenAL
– They initialize global variables in DLL main – which isn’t called if you use a library or source.
– They include mutually exclusive cpp and c versions of 3 of the same files. All the cpp ones do is call the C ones in some #define so not only was it an pointless thing to do but made it so if you included both it wouldn’t compile with very strange errors.
– They changed it so you can no longer check for errors after querying the device but before creating the context. I think this is actually a bug, since querying the device is something that should potentially return errors.
I’m honestly curious as to why people knowingly release APIs in complex configurations that cannot compile in other configuations. It could be that they don’t know, but I think this must be something people complain about a lot. It could be that they think people won’t mind fixing it. Possible, but it’s non-trivial. I had to create a new file for example to call the DLL main contents in a constructor and destructor. I imagine novice users would complain continuously and give up shortly thereafter. It could be they don’t care. Maybe they don’t have professional pride in their work because it is open source.
One good thing about Microsoft is the projects they release actually load and build in different configurations.