Como o vinculador C ++ sabe qual .lib contém quais funções?

Por exemplo, no Boost. Eu estabeleci umincluir&nbsp;diretório no MSVC ++ 2010 para o diretório raiz Boost e tenha um#include <boost/regex.hpp>&nbsp;no meu código fonte. Eu estabeleci umbiblioteca&nbsp;diretório paraboost\stage\lib&nbsp;mas existem centenas de arquivos - vários para cada biblioteca Boost e estes para o boost :: regex:

libboost_regex-vc100-s-1_46.lib
libboost_regex-vc100-mt-gd-1_46.lib
libboost_regex-vc100-mt-1_46.lib
libboost_regex-vc100-mt-s-1_46.lib
libboost_regex-vc100-mt-s.lib
libboost_regex-vc100-s.lib
libboost_regex-vc100-mt.lib
libboost_regex-vc100-mt-gd.lib

Como o MSVC sabe qual dos arquivos lib é o correto? Se varrer todas elas em busca de assinaturas corretas de funções, isso significa que duas bibliotecas diferentes compiladas de duas fontes diferentes (não ligadas umas às outras) que definem funções com nomes e parâmetros idênticos não podem estar em uma pasta lib?

E como ele sabe o que é certo entre todos esses diferentes regex .lib's? E então, cada arquivo com1_46&nbsp;em seu nome de arquivo parece idêntico ao respectivo arquivo sem, posso excluir com segurança um dos dois?