The file "SD.h" links to SdFatUtils, in line 21: #include "utility/SdFatUtil.h"
This is - as far as I see - not required and only makes troubles if you want to avoid having the Serial declared for your project.
The line could simply be commented out.
(btw: The page SD - Arduino Reference should have a link to this forum, but the link there is wrong / dead)
In development version I add serial writes for debugging purposes. As this code should not be active in the deployed version, it's deactivated usign define-blocks.
To find potentially unwanted code accessing the serial I currently use this code:
// #define DEBUG
#ifndef DEBUG
// Avoid that debug code remains in release version
#define Serial RaiseErrorIfForgotInCode
#endif
This doesn't work if the SD lib is in use.
But for me the most important thing: Why should the SD lib link to a library that is not used anyway?