Cómo sabe el vinculador de C ++ qué .lib contiene qué funciones?

Por ejemplo en Boost. Establezco uninclui en MSVC ++ 2010 al directorio raíz de Boost y tiene un#include <boost/regex.hpp> en mi código fuente. Establezco unbibliotec directorio aboost\stage\lib pero hay cientos de archivos allí, varios para cada biblioteca Boost y estos para 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

¿Cómo sabe MSVC cuál de todos los archivos lib es el correcto? Si los escanea a todos en busca de las firmas de funciones correctas, ¿eso significa que 2 bibliotecas diferentes compiladas a partir de dos fuentes diferentes (no vinculadas entre sí) que definen funciones con nombres y parámetros idénticos no pueden estar en una carpeta lib?

¿Y cómo sabe cuál es el correcto entre todos esos diferentes expresiones regulares .lib? Y luego, cada archivo con1_46 en su nombre de archivo parece ser idéntico al archivo respectivo sin, ¿puedo eliminar con seguridad uno de los dos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta