Mono exports several symbols with fairly generic names, which sometimes causes conflicts with third-party libraries defining the same symbols.
Here is a current list: https://gist.github.com/rolfbjarne/36e50db43d3d29eed8e8 (usually it's some of the Win32 symbols which cause problems).
We need a way to rename these symbols for iOS in order to be a good citizen. My guess is that this may affect Android as well, so a generic solution would be preferable.
I've tried hiding the non-prefixed symbols by merging the object files in the static mono library using ld (ld -r -exported_symbols_list <fileOfPublicSymbols> *.o), and while the resulting library works at least for a simple test case, the debug symbols are removed, and I could not find a way to prevent that (or add them back).
So I've come to the conclusion that the only solution is to fix the static mono library during the build, by either:
* Make consumers able to specify a custom mono-remap.h to remap any symbol.
* Make it a policy to only export symbols with a fixed set of prefixes.
I'm willing to implement the solution, once we've decided what to do.
Fixed the io-layer symbols at least, those usually are the ones causing the most problems.
In mono master 508417264359e6df50c9f9d86adad19b9535cc1b.
Updated list at https://gist.github.com/luhenry/37eb32f32a6a3d821f2e1ee832dfbb92 with Mono 18.104.22.168 (master/798c5efa52a)
Some of these symbols are global variables that could (should?) be prefixed with `mono_`.
Fixed in master with https://github.com/mono/mono/commit/34b4d35fb7882632d8da48ea8b47c3f9c98bf069