Visual C++: ¿Cómo deshabilitar advertencias específicas del enlazador?


Estoy usando una biblioteca de CGAL que durante la etapa de enlace de mi compilación de código produce una gran cantidad de 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 específica del enlazador 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 en mi extremo.

Author: Ashwin Nanjappa, 2009-03-19

8 answers

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

 /ignore:4099

Esto está en Propiedades - >Enlazador - > Línea de comandos

 85
Author: Aaron Saarela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-20 20:43:29

No se puede desactivar esa advertencia específica.

De acuerdo con Geoff Chappell la advertencia 4099 se trata como si fuera demasiado importante para ignorarla, incluso usando en conjunto 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 muy Despreciables

Para algunos números de advertencia, la especificación en una opción / ignore es aceptar pero no necesariamente actuó en consecuencia. Si se produce la advertencia mientras la opción / wx no está activa, el mensaje de advertencia sigue se muestra, pero si la opción / wx está activa, entonces la advertencia es ignorar. 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 señalizadas.

Los siguientes números de advertencia se ven afectados:

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237
 44
Author: John Weldon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-07 22:40:14

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

Por ejemplo, si desea eliminar la advertencia para 4099, abrir enlace.exe con un editor hexadecimal, goto línea 15A0 que lee 03 10 (little endian para 4099) y lo reemplaza con FF 00 (que no existe.)

 9
Author: Gurg Hackpof,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-24 09:01:29

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

Dado que no puede conseguir que Visual Studio (2010 en mi caso) ignore las advertencias de 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 construyendo los archivos pdb.

PERO, el valor predeterminado es nombrar todos los archivos PDF de la misma manera: vc100.pdb en mi caso. Como usted necesita un .pdb para todos y cada uno .lib, esto crea un problema, especialmente si estás usando algo como ImageMagik, que crea unos 20 estáticos .archivos lib. No puede tener 20 archivos lib en un directorio (al que el enlazador de su aplicación hace referencia para enlazar en las bibliotecas) y tener todos los 20 .los archivos pdb llamaban 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. Por aquí, cada uno .lib obtiene un nombre similar .pdb, y usted puede poner todas las LIBs y PDB en uno directorio para su proyecto a utilizar.

Así que para la configuración de "Depuración", edité:

Propiedades -> Propiedades de configuración -> C/C++ - > Archivos de salida - > Nombre del archivo de la Base de datos del programa desde

V (IntDir)vc Plat (PlatformToolsetVersion).ap

Debe ser el siguiente valor:

$(OutDir) vc Plat (PlatformToolsetVersion) D D(ProjectName).ap

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

Ahora puedo copiar toda mi liberación .archivos lib, mi depuración .archivos lib y la depuración .archivos pdb en un solo lugar en mi sistema de desarrollo, y el proyecto que utiliza esa biblioteca de terceros en modo de depuración, tiene los archivos pdb que necesita en modo de depuración.

 7
Author: Minok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-09 00:17:53

Sospecho /ignoro es un enlace VC6.opción exe. para el enlazador de VS2005 y VS2008 no hay ninguna opción documentada /ignorar disponible, pero el enlazador parece simplemente ignorar la opción "/ignorar:XXX", sin error y sin efecto.

 3
Author: zhaorufei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-04 07:49:55

El archivo PDB se utiliza normalmente 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 objeto de destino. Lea la entrada MSDN en LNK4099 aquí.

Alternativamente, puede desactivar la generación de información de depuración desde el campo Propiedades del proyecto > Enlazador > Depuración > Generar información de depuración.

 1
Author: dirkgently,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-19 10:37:58

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

Herramientas de enlace Advertencia LNK4099 :

También podrías compilar con / Z7, así que no es necesario utilizar el pdb, o elimine la opción / DEBUG linker si no tengo .archivos pdb para los objetos estás enlazando.

 1
Author: ax.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-19 16:22:46

No se puede desactivar la advertencia enlazador 4099, como se 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 se guarda .archivo lib. Establece el valor "Out (OutDir) Targ (TargetName).pdb " to Properties->C/C++->Output Files-Nombre del archivo de la Base de datos del programa
  • Guarde la información de depuración en .archivo lib. Establezca el valor "Compatible con C7 (/Z7)" en Propiedades- > C / C++ - > General - > Información de depuración Formato
  • Deshabilite la información de depuración de generación para esta biblioteca. Eliminar valor de Propiedades->C/C++->General - > Formato de información de depuración
 1
Author: KindDragon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-06 13:59:21