I generally don't like developing in Linux. I find all the obfuscated, inconsistent "conventions" confusing and arcane, and I don't really understand why some few people are so devoted to a computing platform based on 40-year-old technology.
So anyway, I'd been banging my head trying to figure out why a shared object wasn't being loaded when I brought some libraries to machine B from machine A. They ran fine on A, and compiled and linked just fine on B. But they wouldn't run on B, and I couldn't figure out why. LD_LIBRARY_PATH was exported properly (set to ".") but the shared object wasn't loaded. After Googling for a while I discovered yet another unintuitive environment variable you can set that causes some debugging information to be displayed by the various dl* functions: LD_DEBUG. Gee, it's so obvious!
So I exported LD_DEBUG=libs and found that the shared object I was trying to load was itself referring to some libraries on the old machine...?!?! Or at least it thought it was (the objects it wanted were actually linked in statically). I rebuilt the shared object and everything worked just fine from there out... but who really knows why? I sure don't.
Linux is extremely difficult to develop on, and I avoid it like the plague. Linux-devotees (and I know quite a few) can make whatever elegance/power arguments they want, but the simple fact of the matter is that the mental overhead involved with developing on Linux is substantial, and the learning curve is steep. I'd rather use my brain to do actual work than to decipher and untangle impenetrable webs of Linuxisms.