What you want to do is have each project in its own directory like in (1). Then you tag working versions of your dependencies and save the tag in some file for build like:
App1/.dependencies:
CommonLib1 tag-20100515
CommonLib2 tag-20100510
App2/.dependencies:
CommonLib1 tag-20100510
CommonLib2 tag-20100510
Then you use your build scripts to build the libraries based on the specific tag and include those built libraries as derived objects for your applications. If build time is an issue, you can have the tagged version that are in use for those libraries pre-built and saved somewhere.
Note (design principles are same if designing database schema, object model or product build):
- Do not link to the code in other projects (breaks encapsulation)
- Do not have multiple copies of the libraries in your repository (modularity)