I want to know the difference between PCL (Portable Class Library) and a normal library.
PCL uses profiles with which it can be determined which platforms and features are available. Both can generate a DLL which can be used on different platforms. For a normal library project you can also set the target framework (e.g. .NET 3.5). Xamarin says that #if
compiler directives are only suitable for Shared Projects, which means they are not used in PCL. I think the PCL and the library project are very similar.
So what are the differences, when dealing with different mobile platforms?
Portable class libraries are platform independent. They do not use conditional compilation and unmanaged code, they have no UI inside (UI is platform dependent). This is because PCL should work on all specified platforms which was chosen as a target. Also, availability of features depends on selected targets.
So a PCL can be referenced by any project which target is specified in the PCL settings. But libraries of other types can be referenced only by projects which have the same target or by upper subsets of .Net (for example, Silverlight libraries can be used in Windows projects but not vice versa).
More about restrictions and features of PCL can be found on two links bellow:
On the first link you can read about what is PCL in general. And on second - info about targets and features.
Hope this helps.
EDIT: See also What is a Portable Class Library?