visual-studio - tag - visual studio code autocomplete html
Visual C++: ¿Cómo deshabilitar las advertencias específicas del enlazador? (8)
(Para el registro y antes de que el hilo desaparezca en los foros msdn) No puede deshabilitar la advertencia (al menos en VS2010) porque está en la lista de advertencias que no se pueden deshabilitar (entonces / wd4099 no funcionará) , pero lo que puede hacer en su lugar es parche link.exe (normalmente 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, pase a la línea 15A0 que dice 03 10 (little endian para 4099) y reemplácela por FF 00 (que no existe).
Estoy usando una biblioteca de CGAL que durante la etapa de vinculación 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ífica en Visual C ++ / Studio 2008?
Tenga en cuenta que no tengo ningún control en la biblioteca externa (CGAL) que estoy usando. No puedo / no quiero entrar en la recompilación de la biblioteca externa. Por lo tanto, la necesidad de arreglar los mensajes en mi extremo.
Agregue lo siguiente como una opción de enlazador adicional:
/ignore:4099
Esto está en Propiedades-> Enlazador-> Línea de Comando
EDITAR: no use vc80 / Visual Studio 2005, pero las versiones de Visual Studio 2008 / vc90 de la biblioteca CGAL (quizás from here ).
Linker Tools Advertencia LNK4099 :
También puede compilar con / Z7, por lo que no es necesario utilizar el pdb, o eliminar la opción del vinculador / DEBUG si no tiene archivos .pdb para los objetos que está vinculando.
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 here .
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.
No puedes deshabilitar esa advertencia específica.
Según Geoff Chappell, la advertencia 4099 se trata como si fuera demasiado importante como 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:
Advertencias no muy ignorables
Para algunos números de advertencia, se acepta la especificación en una opción / ignorar, pero no se actúa necesariamente sobre ella. Si la advertencia ocurre mientras la opción / wx no está activa, el mensaje de advertencia sigue apareciendo, pero si la opción / wx está activa, la advertencia se ignora. Es como si la advertencia se considerara lo suficientemente importante como para anular un intento de ignorarla, pero no si el usuario ha puesto un precio demasiado alto a las advertencias no ignoradas.
Los siguientes números de advertencia se ven afectados:
4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237
No se puede deshabilitar la advertencia del enlazador 4099, 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 "$ (OutDir) $ (TargetName) .pdb" en Properties-> C / C ++ -> Output Files-Program Database File Name
- Guarde la información de depuración en el archivo .lib. Establezca el valor "C7 compatible (/ Z7)" en Propiedades-> C / C ++ -> General-> Formato de información de depuración
- Deshabilitar 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
Para el beneficio de los demás, pensé que incluiría lo que hice.
Como no se puede obtener Visual Studio (2010 en mi caso) para ignorar las advertencias LNK4204, mi enfoque era darle lo que quería: los archivos pdb. Como estaba usando librerías de código abierto en mi caso, ya tengo el código compilando 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 estáticos .lib. No puede tener 20 archivos lib en un directorio (al que hace referencia el enlazador de su aplicación para vincularlos en las bibliotecas) y tiene 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 forma, cada archivo .lib recibe un nombre similar a .pdb, y puede poner todas las LIB y PDB en un directorio para que su proyecto lo use.
Entonces, para la configuración "Debug", 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 $ (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 que es más importante, se nombran con el sufijo del nombre del proyecto D +. Esto significa que cada proyecto de biblioteca 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 el pdb archivos que necesita en modo de depuración.
Sospecho / ignorar es una opción VC6 link.exe. para el enlazador VS2005 y VS2008 no hay ninguna opción documentada / ignorada disponible, pero el enlazador simplemente parece ignorar la opción "/ ignorar: XXX", sin error ni efecto.