Pregunta

Estoy usando una biblioteca de CGAL que durante la etapa de enlace de mi compilación de código produce muchas advertencias de enlace 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 desactivo esta advertencia de enlazador específico en Visual C ++ / Studio 2008?

Tenga en cuenta que no tengo ningún control sobre la biblioteca externa (CGAL) que estoy usando. No puedo / no quiero volver a compilar la biblioteca externa. Por lo tanto, la necesidad de arreglar los mensajes a mi fin.

¿Fue útil?

Solución

Agregue lo siguiente como una opción de vinculador adicional:

 /ignore:4099

Esto está en Propiedades - > Linker - > Línea de comando

Otros consejos

Actualización 2018-10-16

Según se informa, a partir de VS 2013, esta advertencia se puede deshabilitar. Vea el comentario de @Mark Ransom.

Respuesta original

No puede deshabilitar esa advertencia específica.

Según Geoff Chappell la advertencia 4099 se trata como si fuera demasiado importante ignorarlo, incluso al usarlo junto con / wx (que trataría las advertencias como errores e ignoraría la advertencia especificada en otras situaciones)

Aquí está el texto relevante del enlace:

  

Advertencias no imperceptibles

     

Para algunos números de advertencia, la especificación en una opción / ignorar es   aceptado pero no necesariamente actuado. ¿Debería ocurrir la advertencia?   mientras la opción / wx no está activa, el mensaje de advertencia sigue   aparece, pero si la opción / wx está activa, entonces la advertencia es   ignorado Es como si la advertencia se considera lo suficientemente importante como para   anular un intento de ignorarlo, pero no si el usuario ha puesto demasiado   alto precio en advertencias no ignoradas.

     

Los siguientes números de advertencia se ven afectados:

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237

(Para el registro y antes de que el hilo desaparezca en los foros de msdn) No puede deshabilitar la advertencia (al menos en VS2010) porque está en la lista de las advertencias que no se pueden deshabilitar (por lo que / wd4099 no funcionará), pero lo que puede hacer en su lugar es parchear link.exe (generalmente C: \ Archivos de programa (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe) para eliminarlo de dicha lista. Suena como un martillo neumático, lo sé. Sin embargo, funciona.

Por ejemplo, si desea eliminar la advertencia para 4099, abra link.exe con un editor hexadecimal, vaya a la línea 15A0 que dice 03 10 (little endian para 4099) y reemplácelo con FF 00 (que no existe. )

Para beneficio de otros, pensé que incluiría lo que hice.

Dado que no puede hacer que Visual Studio (2010 en mi caso) ignore las advertencias LNK4204, mi enfoque fue darle lo que quería: los archivos pdb. Como estaba usando bibliotecas de código abierto en mi caso, ya tengo el código que construye los archivos pdb.

PERO, el valor predeterminado es nombrar todos los archivos PDF de la misma manera: vc100.pdb en mi caso. Como necesita un .pdb para cada .lib, esto crea un problema, especialmente si está utilizando algo como ImageMagik, que crea unos 20 archivos .lib estáticos. No puede tener 20 archivos lib en un directorio (que el enlazador de su aplicación hace referencia para vincular en las bibliotecas) y tener todos los 20 archivos .pdb llamados lo mismo.

Mi solución fue ir y reconstruir mis archivos de biblioteca estática, y configurar VS2010 para nombrar el archivo .pdb con respecto al PROYECTO. De esta manera, cada .lib obtiene un .pdb con un nombre similar, y puede colocar todos los LIBs y PDB en un directorio para que su proyecto los use.

Entonces, para " Debug " configuración, edité:

Propiedades - > Propiedades de configuración - > C / C ++ - & Gt; Archivos de salida - & Gt; Nombre de archivo de base de datos del programa de

$ (IntDir) vc $ (PlatformToolsetVersion) .pdb

para ser el siguiente valor:

$(OutDir)vc$(PlatformToolsetVersion)D$(ProjectName).pdb

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

Ahora puedo copiar todos mis archivos .lib de lanzamiento, mis archivos .lib de depuración y los archivos .pdb de depuración en un solo lugar en mi sistema de desarrollo, y el proyecto que usa esa biblioteca de terceros en modo de depuración, tiene los archivos pdb que necesita en modo de depuración.

Sospecho / ignoro es una opción VC6 link.exe. para el enlazador VS2005 y VS2008 no hay una opción documentada / ignorar disponible, pero el enlazador simplemente ignora la " / ignore: XXX " opción, sin error y sin efecto.

El archivo PDB generalmente se usa para almacenar información de depuración. Esta advertencia se debe probablemente a que el archivo vc80.pdb no se encuentra al vincular el archivo de objeto de destino. Lea la entrada de MSDN en LNK4099 aquí .

Alternativamente, puede desactivar la generación de información de depuración desde las Propiedades del proyecto > Linker & Gt; Depuración de & Gt; Generar campo de información de depuración.

EDITAR: no use vc80 / Visual Studio 2005, sino las versiones de Visual Studio 2008 / vc90 de la biblioteca CGAL (tal vez de aquí ).

Advertencia de herramientas de enlace LNK4099 :

  

También puedes compilar con / Z7, así que   el pdb no necesita ser usado, o   elimine la opción del vinculador / DEBUG si   no tienen archivos .pdb para los objetos   estás vinculando.

No puede deshabilitar la advertencia 4099 del enlazador, como dijo @John Weldon.

Debería reconstruir la biblioteca con algunos cambios en la configuración del proyecto. Tienes varias opciones:

  • Guardar archivo PDB con información de depuración es la misma carpeta donde guarda el archivo .lib. Establezca el valor & Quot; $ (OutDir) $ (TargetName) .pdb & Quot; a Propiedades - > C / C ++ - > Archivos de salida-Nombre de archivo de base de datos del programa
  • Guardar información de depuración en el archivo .lib. Establezca el valor & Quot; C7 compatible (/ Z7) & Quot; a Propiedades - > C / C ++ - > General - > Formato de información de depuración
  • Deshabilita la información de depuración de generación para esta biblioteca. Eliminar valor de Propiedades - & Gt; C / C ++ - & Gt; General - & Gt; Formato de información de depuración
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top