Estoy usando una biblioteca de CGAL que durante la fase de vinculación de mi compilación de código produce una gran cantidad de vinculación de las advertencias de esta forma:

warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info

¿Cómo puedo desactivar este enlazador de advertencia en Visual C++/Studio 2008?

Nota que no tengo ningún control sobre el exterior (CGAL) de la biblioteca de la que estoy utilizando. No puedo/no quiero entrar en volver a compilar la librería externa. Por lo tanto, la necesidad de solucionar los mensajes en mi final.

  • Para VS2005 /ignorar:4099 funciona bien.
  • /ignore:4099 funciona bien aquí con VS2008.
  • /ignore:4099 funciona bien en Visual Studio 10 con C++. Tengo la advertencia LNK4099: PDB 'vc100.pdb' was not found with 'gtest_main-mdd.lib(gtest_main.obj) y logró extraer de esta manera.
  • Véase también: no se Puede desactivar la advertencia de LNK4099′
  • VS2013 acepta /ignorar:4099 bien 🙂

8 Comentarios

  1. 97

    Agregar la siguiente como una opción del vinculador:

     /ignore:4099

    Esto es en Propiedades->Enlazador->Línea de Comandos

    • Extraño, pero no funciona! Todavía estoy viendo los errores!
    • No creo /ignorar que existe. Los errores siguen en la lista, y /ignore no está documentado en MSDN. Estoy tratando de desactivar 4075 para «advertencia LNK4075: ignorando ‘/EDITANDCONTINUE’ debido a ‘/INCREMENTAL:NO «especificaciones».
    • /IGNORE no está documentado, pero está disponible. Consulte connect.microsoft.com/VisualStudio/feedback/details/176188/…
    • /ignore no parece funcionar para Windows CE (SH4) objetivo bajo Visual Studio 2008.
    • No trabajo para la advertencia 4099 connect.microsoft.com/VisualStudio/feedback/details/176188/…
    • Usted puede utilizar /ignorar:4099 como un enlazador de la bandera, pero hay un problema. Por desgracia, Microsoft decidió hacer 4099 no ignorable de advertencia, por lo que tiene el parche link.exe. Suena un poco loco, pero simplemente no hay otra manera. Más detalles aquí: bottledlight.com/docs/lnk4099.html he utilizado HxD como un editor hexadecimal, y después de la descripción de la página funcionaba bien con VS10. La orden es 4088, 4099, 4105.
    • /ignore:4099 funciona fuera de la caja con VS12, afortunadamente.
    • no funciona para 4204 (VS 2008, x64)
    • bottledlight.com/docs/lnk4099.html 404 🙁
    • Vs12 5 de actualización no funciona
    • bottledlight.com fue un error 404 para mí también, pero hay esta bitsquid blog publicado a finales de 2011. El código ruby enumera todos los link.exe versiones, hace copias de seguridad, y no un sencillo encontrar reemplazar. Reemplaza [4088, 4099, 4105] con [4088, 65535, 4105].
    • También esto. michaelnoland.com/…
    • /ignore:4099 no parece funcionar en VS12 update 3
    • Trabaja en VS de 2015 (el proyecto es el uso de VS2013 conjunto de herramientas, no se si lo que hace la diferencia)
    • /ignore:4099 trabajó para mí en VS 2013 update 4.

  2. 47

    Actualización 2018-10-16

    Según los informes, como el de VS 2013, este aviso puede ser deshabilitado. Véase el comentario de @Marca Rescate.

    Respuesta Original

    No se puede desactivar esa advertencia específica.

    Según Geoff Chappell la 4099 advertencia es tratado como si es demasiado importante como para pasar por alto, incluso por usar en conjunción con /wx (que iba a tratar de las advertencias de los errores y de ignorar la advertencia especificados en otras situaciones)

    Aquí está el texto relevante desde el link:

    No Muy Unignorable Advertencias

    Para algunos de advertencia de los números, la especificación de un /ignore opción es
    aceptado, pero no necesariamente hay que actuar. Debe la advertencia se produce
    mientras el /wx opción no está activa, entonces el mensaje de advertencia es todavía
    se muestra, pero si el /wx opción está activa, entonces la advertencia es
    ignorado. Es como si la advertencia se cree lo suficientemente importante como para
    reemplazar un intento de ignorar, pero no si el usuario ha puesto demasiado
    alto precio en unignored advertencias.

    La siguiente advertencia números se ven afectadas:

    4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237
    • +1 para el enlace a Geoff Chappell.
    • Él no dice que «el 4099 advertencia es demasiado importante como para ignorar»; se infiere que esta en el hecho de que no puede ser apagado. (Señalar aquí ya que no hay ninguna información en el enlace.)
    • Actualizado a la dirección de su preocupación @BenM
    • Esta respuesta es edad, la desactivación de advertencia 4099 trabajado bien para mí en VS2017. Se desprende de los comentarios de aquí que se puede deshabilitar probablemente comenzando con VS2013.
  3. 10

    (Para el registro y antes de que el hilo desaparece en los foros de msdn)
    No se puede deshabilitar la advertencia (al menos en VS2010) porque está en la lista de las advertencias de que no se puede deshabilitar (so /wd4099 no va a funcionar), pero lo que usted puede hacer en su lugar es el parche link.exe (generalmente C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe), para quitarlo de la lista . Suena como un martillo neumático, lo sé. Funciona aunque.

    Por ejemplo, si desea quitar el aviso para 4099, abrir link.exe con un editor hexadecimal, ir a la línea 15A0 que lee 03 10 (little endian para 4099) y reemplazarlo con FF 00 (que no existe.)

    • Usted debe estar buscando la secuencia F8 0F 00 00 – 03 10 00 00 – 09 10 00 00 (4088, 4099, 4105 como de 32 bits, palabras de doble en little endian). Es lo mismo que en el amd64/link.exe.
    • Confirmado aún trabajando para VC++ 2012 amd64.
  4. 8

    Para el beneficio de los demás, pensé que me gustaría incluir lo que hice.

    Puesto que no se puede obtener de Visual Studio (2010, en mi caso) para ignorar el LNK4204 advertencias, mi enfoque era para darle lo que quería: los archivos pdb. Como yo era el uso de bibliotecas de código abierto en mi caso, tengo el código de construcción de los archivos pdb ya.

    PERO, el valor predeterminado es nombre de todos los archivos PDF de la misma cosa: vc100.pdb en mi caso.
    Como usted necesita un .pdb para cada uno y cada una .lib, esto crea un problema, especialmente si usted está usando algo como ImageMagik, que crea unos 20 estática .archivos lib. Usted no puede tener 20 lib archivos en un directorio (que la aplicación del enlazador referencias al enlace en las bibliotecas), y tiene todas las de 20 .los archivos pdb llamados de la misma cosa.

    Mi solución era ir y reconstruir mi biblioteca estática archivos y configurar VS2010 a nombre de el .archivo pdb con respecto al PROYECTO. De esta manera, cada uno de ellos .lib recibe un nombre similar .ap, y usted puede poner todas las LIBs y PDBs en un directorio para el proyecto que utilice.

    Así que para la «Depuración» configuraton, he editado:

    Propiedades->Propiedades de Configuración -> C/C++ -> Archivos de Salida -> Base de datos del Programa Nombre de Archivo de

    $(IntDir)vc$(PlatformToolsetVersion).ap

    a ser el siguiente valor:

    $(OutDir)vc$(PlatformToolsetVersion)D$(Nombreproyecto).ap

    Ahora, en lugar de en algún lugar en el directorio intermedio, el .pdb se escriben los archivos en el directorio de salida, donde el .lib archivos también está escrito, Y lo que es más importante, que se nombran con el sufijo D+nombre del proyecto. Esto significa que cada biblioteca proyecto produduces un proyecto .lib y un proyecto específico .pdb.

    Ahora soy capaz de copiar todos los de mi liberación .archivos lib, mi depurar .archivos lib y la depuración .los archivos pdb en un lugar en mi sistema de desarrollo, y el proyecto que usa la 3ª parte de la biblioteca en modo de depuración, tiene el ap archivos que necesita en modo de depuración.

    • Yo diría que este es el respuesta a la pregunta. La sugerencia de aplicar AL ENLAZADOR que muchas de las respuestas contienen es asnal. Incluso si Microsoft está «mal» acerca de hacer esta advertencia de la onu-ignorable.
    • Esta es la respuesta apropiada SI usted es la compilación de la biblioteca de origen. Pero algunos programas tienen dependencias en librerías comerciales que no incluyen .los archivos pdb, para generar un .archivo pdb para ellos no es una opción.
  5. 3

    Sospecho /ignore es una VC6 link.exe opción.
    para VS2005 y VS2008 del enlazador no hay documentado /ignore opción disponible, pero el enlazador busca simplemente ignorar el «/ignore:XXX» opción, no hay ningún error y sin efecto.

    • De hecho, es enouraged no ignorar las advertencias del vinculador, por lo que el ignorar la bandera fue desactivado después de VC6: bytes.com/topic/net/answers/…
    • /ignore puede ser utilizado de nuevo en VS2013.
  6. 1

    El archivo PDB se utiliza normalmente para almacenar la información de depuración. Esta advertencia es causada probablemente debido a que el archivo vc80.pdb no se encuentra al vincular el objeto de destino del archivo. Leer el MSDN entrada en LNK4099 aquí.

    Alternativamente, usted puede desactivar la depuración de la generación de información a partir de las Propiedades del Proyecto > Enlazador > Depuración de > Generar Información de Depuración en campo.

    • La desactivación de la información de depuración se soluciona el enlazador advertencias, pero, a continuación, los puntos de interrupción no funcionan sin la información de depuración. Que no es muy útil para mí.
    • Desactivar las advertencias nunca es la cosa correcta de hacer. Revisión de ellos. Usted necesita encontrar el ap y ver de que se copian en la ubicación correcta.
    • Suspiro, que es verdad! Lamentablemente en este caso, no puedo encontrar que el ap.
    • vc80.pdb es sólo el valor predeterminado pdb nombre para vc8. Esta advertencia significa simplemente que no hay ninguna depuración de la información disponible para el CGAL de la biblioteca. Es seguro ignorar.
  7. 1

    EDIT: no utilice vc80 /Visual Studio 2005, pero Visual Studio 2008 /vc90 versiones de la CGAL biblioteca (tal vez de aquí).

    Enlazador de Herramientas de Advertencia LNK4099:

    También puede compilar con /Z7, por lo que
    el ap no debe ser utilizado, o
    quitar el /DEBUG opción del vinculador si
    no se tiene .los archivos pdb para los objetos
    se vincula.

    • Gracias. Compilar con /Z7 sigue preguntando por el .archivo pdb de la CGAL de la biblioteca. /DEBUG resuelve el enlazador advertencias, pero, a continuación, los puntos de interrupción no funcionan sin la información de depuración.
  8. 1

    No se puede deshabilitar el enlazador de advertencia 4099, como dijo @John Weldon.

    Debe reconstruir la biblioteca con algunos cambios en la configuración. Usted tiene varias opciones:

    • Guardar archivo PDB con información de depuración es la misma carpeta donde guardar .archivo lib. Establezca el valor «$(OutDir)$(TargetName).pdb» Propiedades->C/C++->Archivos de Salida-Base de datos del Programa Nombre de Archivo
    • Guardar la información de depuración en .archivo lib. Establezca el valor «C7 compatible (/Z7)» Propiedades->C/C++->General>Información de Depuración Formato
    • Deshabilitar la generación de información de depuración para esta biblioteca. Quitar valor a partir de Propiedades->C/C++->General>Información de Depuración Formato

Dejar respuesta

Please enter your comment!
Please enter your name here