What should I know when making a library for the Arduino?
I'll take a stab. I haven't written code for Arduino, but I've done a lot of C and C++ programming.  It would help if I actually saw your errors, but nonetheless.  

The main thing you need to always remember when using C++ with C code is that your C++ code needs functions declared with "extern "C"" if you want C code to be able to link against the C++ code.  The "extern "C"" is what tells the C++ compiler that I'm creating linkable code for C files or I'm using code from C files.  So all your functions in the library API header should correlate with a function in the source file  defined liked "extern "C" void dosomething()".  If you're trying to use classes in C++, remember that C code can't call it, you'll need to create functions (extern "C") to access the object.  Now, if your C code is compiled with a C++ compiler, then don't worry about "extern "C"".

If you want to call C code inside your C++ code, then you need to wrap the C header with a construct like this:

#ifdef ___cplusplus
extern "C" {
#endif

///all my C function declarations... yada yada

#ifdef __cplusplus
}  //end extern "C"
#endif


If you working in C++, don't use a lot a #defines unless you're creating compile-time flags like "DEBUG" or "VERSION2" to create special sets of code. Otherwise use "const int/char/float" for number defines for safe type checking. The compilers are usually smart enough to optimize these out, so they wind up in ROM/code space (depends though). Also, don't create MACROS, use inline functions.  Also, don't always follow convention when programming if it's stupid such as using a lot of macros and number defines in C++.  The same thing applies to C99 version of C, it has added things like inline functions and consts from C++.  The industry realizes how much buggy code and hard to maintain code comes from overuse of the preprocessor language.  

Eclipse usually stores the obj files in a directory under your project. If you're doing a "Debug" build, then it's located under the "Debug" folder under your project folder.  If you're doing a "Release" build, then look under "Release", etc.  Normally a clean build just works for me in Eclipse, so I don't know what's going wrong with your setup.  I guess make sure you're not creating precompiled headers.