Estoy tratando de encontrar una buena manera de determinar qué módulo en tiempo de enlace está causando una cierta biblioteca para ser procesado como un "/ DEFAULTLIB" como se ve en el resultado del enlazador detallado de Visual Studio.Enlazador El problema: ¿Cómo determinar donde un "/ DEFAULTLIB" viene de
Aquí es mi situación, tengo varios biblioteca estática pre-requisitos y cada uno tiene una liberación y una versión de depuración (BlahD.lib y Blah.lib). Por algún motivo, en el momento del enlace, todas las * D.lib se procesan como bibliotecas predeterminadas, aunque estoy creando una versión con las librerías sin depuración especificadas como "Dependencias Adicionales". Si nunca construyo las versiones de depuración de las bibliotecas estáticas esos archivos * D no existirían y habría un error del enlazador (no se puede abrir el archivo).
puedo conseguir mi proyecto para construir con éxito mediante la especificación/NODEFAULTLIB para todos los archivos .lib estos infractores. Todas las bibliotecas de versiones se conectan y todos están contentos. Pero quiero entender qué está pasando aquí. ¿Qué está causando que estos archivos * D.lib sean procesados por el vinculador? ¿Es mi única esperanza escribir algún tipo de script que dumpbins todo en este proyecto masivo y sus proyectos dependientes (microsoft support)? Incluso entonces, no entiendo qué buscar en la salida del dumpbin, ¿esto se aplica a los archivos .lib así como a los archivos .obj?
Si está en un sistema que admite estos comandos, puede buscar los archivos generados fácilmente desde la línea de comandos: find. -name "* .directives.txt" | xargs grep –
JamesG
Encontré este método el más útil, aunque encontré más fácil dirigir todos los resultados al mismo archivo que tengo cientos de archivos de objetos en múltiples directorios. Redirigir con >> c: \ directives.txt en su lugar. – Teknogrebo
Parece que las directivas antes mencionadas vienen en texto sin formato dentro de los archivos obj y lib. Por lo tanto, no es necesario llamar a dumpbin.Para mí solo ejecutando lo siguiente desde la línea de comando funcionó: 'findstr/m/s/c:"/DEFAULTLIB: "" mylib * .obj * .lib' –