An SWC is a compiled library bundled into your application's SWF when you it's built. This creates a larger application file (which takes longer to load in a browser), and means every application launch will take the same amount of time to load. If the resulting SWF is fairly large, every launch will take a while. These libraries are "statically linked" (i.e. included in the final compiled SWF).
RSLs are compiled libraries dynamically linked to your application. You build them as separate SWFs, and add them to a project as an RSL. The compiler for your application will create a link which allows your application to use it at runtime, rather than importing it into the main SWF file. When your application launches, it will attempt to locate the RSL and load the entire library dynamically. This increases the initial load of your application; once located and loaded, however, they are cached and subsequent application launches should be pretty quick.
RSLs have many benefits, and some drawbacks. Since they are not bundled into your application, your SWF is smaller and will launch more quickly. It also allows you to separate libraries in your application which would be used by other applications. Hence, "shared" library.
It also comes with a cost, however. RSLs are (by default, I think) linked by the compiler using a checksum. You cannot simply modify an RSL which is used by other applications w/out re-compiling them to account for the changes. If you modify the RSL, you'll get an error when your application launches since the checksum it expects won't match the new version of the library.