Lessons from building open source projects
This won't be all that profound, but this is a good place to note some things I'm learning as I've been getting into building open source projects.
I had previously assumed that one compiled library was as good as another, the main distinction being whether you are working on Windows or on Linux, i.e., so long as a library was built on Windows, you can link it into any other Windows project, and similarly for Linux.
Oh, the sadness as I realize my naivete. I'm confronting some sad issues as I'm working on a project in Windows using mingw-w64 so I can use C++11 features that Visual Studio hasn't implemented. I'm still sorting out all the details, so this isn't an authoritative or complete note, but I've learned the following:
Different compilers may generate binary-incompatible libraries, especially in C++. The situation is apparently nicer with C-compiled libraries, but there is apparently no binary standard for generated C++ libraries, so one compiler may generate completely different mangled names (the way class-hierarchies and namespaces get flattened out into a single global-namespace names) from another. Different compilers also handle exceptions differently at the binary level, so, for example, exceptions thrown from a library built by one compiler may not be caught or noticed at all when linked into a project in a different compiler.