当たり前な人にとっては当たり前なんだろうけど、自分はずっと混乱してました。
「静的リンク、動的リンク、暗黙的リンク、明示的リンクってなんやねん」みたいな。
その辺の話がやっと理解できたっぽいので、備忘録として残しておこうと思います。

・前提
ライブラリは関数(と変数)の集合です。
関数は、関数名と関数の中身でできています。

・静的リンクと動的リンク
静的リンクはコンパイル時に関数名と関数の中身をリンクします。コンパイル後にライブラリの中身を変更できないので、「静的」と呼ばれます。
動的リンクは実行時に関数の中身をリンクします。コンパイル後にライブラリの中身を変更する余地が残っているので、「動的」と呼ばれます。

静的リンクでは、必ず.libファイルを使います。
コンパイル時にリンクすべき.libファイルを指定します。

一方、動的リンクでは、(Dynamic Link Libraryという名前の通り、)必ず.dllファイルを使います。
実行時にリンクすべき.dllファイルを参照します。

ここまでは比較的分かりやすい話だと思います。
難しいのが、動的リンクには、.libファイルを使う場合と使わない場合があるというところです。
それは、リンクする.dllファイルのファイル名や関数の関数名(以下、DLL情報と呼ぶ)を、呼び出し側の実行ファイルにどう埋め込むのかという点と関連します。

・明示的リンクと暗黙的リンク
.dllファイルを使うリンクには、明示的リンクと暗黙的リンクがあります。
明示的リンクとは、呼び出し側のプログラムのソースコードに、DLL情報を(明示的に)書くことによって、リンクする方式です。具体的には、LoadLibrary()やGetProcAddress()を用います。
一方、暗黙的リンクとは、呼び出し側のプログラムのソースコードにDLL情報を直接書かずに(暗黙的に)リンクする方式です。

暗黙的リンクでは、ソースコードにDLL情報を書かない代わりに、.libファイルをコンパイル時にリンクすることでDLL情報を実行ファイルに埋め込みます。
以上のような事情から、動的リンクには、.libファイルを使う場合と使わない場合があるのです。

・関連記事
http://akasuku.blog.jp/archives/68875230.html