Estoy usando una biblioteca de CGAL que durante la etapa de vinculación de mi compilación de código produce muchas advertencias de vinculación 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 vinculador 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. De ahí la necesidad de arreglar los mensajes de mi parte.
visual-studio
visual-c++
linker
warnings
cgal
Ashwin Nanjappa
fuente
fuente
/ignore:4099
funciona bien en Visual Studio 10 con C ++. Recibí la advertenciaLNK4099: PDB 'vc100.pdb' was not found with 'gtest_main-mdd.lib(gtest_main.obj)
y logré eliminarla de esta manera.Respuestas:
Agregue lo siguiente como una opción de vinculador adicional:
Esto está en Propiedades-> Vinculador-> Línea de comandos
fuente
Actualización 2018-10-16
Según se informa, a partir de VS 2013, esta advertencia se puede desactivar. Vea el comentario de @Mark Ransom.
Respuesta original
No puede desactivar esa advertencia específica.
Según Geoff Chappell, la advertencia 4099 se trata como si fuera demasiado importante para ignorarla, incluso si se usa 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:
fuente
(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 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é. Aunque 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).
fuente
Para el beneficio de otros, pensé que incluiría lo que hice.
Como no puede hacer 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 que crea los archivos pdb.
PERO, el nombre predeterminado es nombrar todos los archivos PDF de la misma manera: vc100.pdb en mi caso. Como necesita un .pdb para todos y cada uno de los .lib, esto crea un problema, especialmente si está utilizando algo como ImageMagik, que crea alrededor de 20 archivos .lib estáticos. No puede tener 20 archivos lib en un directorio (al que hace referencia el enlazador de su aplicación para enlazar en las bibliotecas) y tener todos los 20 archivos .pdb llamados de la misma manera.
Mi solución fue 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 poner todos los LIB y los PDB en un directorio para que los utilice su proyecto.
Entonces, para la configuración de "Depuración", edité:
Propiedades-> Propiedades de configuración -> C / C ++ -> Archivos de salida -> Nombre de archivo de base de datos de programa de
$ (IntDir) vc $ (PlatformToolsetVersion) .pdb
ser el siguiente valor:
$ (OutDir) vc $ (PlatformToolsetVersion) D $ (Nombre del proyecto) .pdb
Ahora, en lugar de 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 proyecto de biblioteca produce un .lib de proyecto y un .pdb específico del proyecto.
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 el pdb archivos que necesita en modo de depuración.
fuente
Sospecho / ignorar es una opción de link.exe de VC6. para el enlazador VS2005 y VS2008 no hay una opción documentada / ignorar disponible, pero el enlazador parece simplemente ignorar la opción "/ ignorar: XXX", sin error ni efecto.
fuente
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 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 el campo Propiedades del proyecto> Vinculador> Depuración> Generar información de depuración.
fuente
EDITAR: no use vc80 / Visual Studio 2005, sino versiones de Visual Studio 2008 / vc90 de la biblioteca CGAL (tal vez desde aquí ).
Advertencia de las herramientas del vinculador LNK4099 :
fuente
No puede deshabilitar la advertencia 4099 del vinculador, como dijo @John Weldon.
Debería reconstruir la biblioteca con algunos cambios de configuración del proyecto. Tienes varias opciones:
fuente