2011-09-29 12 views
7

Por defecto, al compilar un proyecto de Visual Studio en modo de lanzamiento, la ruta completa a la AP se pone en el archivo de imagen, por ejemplo:de Gaza el camino hacia el AP

c:\myprojects\demo\release\test.pdb 

El uso de un modificador de vinculador indocumentado (/pdbpath:none) se puede forzar a Visual Studio 2008 para reducir el nombre cualificado completo del PDB, por ejemplo:

test.pdb 

tengo que hacer lo mismo con un proyecto que todavía está construido usando VC6.

Probé el interruptor "/pdbpath:none" en el nivel de configuración del proyecto, pero el enlazador se queja de este interruptor desconocido.

¿Alguien sabe un método (o una herramienta) para lograr esto ya sea al vincular un proyecto de VC6 o después directamente a nivel de imagen?

+0

Este modificador está disponible (documentado) comenzando con Visual Studio 2010 – mox

+0

Este modificador también está funcionando con Visual Studio 2008. – mox

+0

Hay una herramienta llamada peupdate ([sitio web aquí] (http://bytepointer.com/tools/index) .htm # peupdate)) que eliminará, quitará o cambiará esta cadena de PDB a cualquier valor arbitrario para un EXE o DLL. Para su pregunta en particular, usaría la opción "-s" (tira) para eliminar la ruta pero dejar el nombre de archivo intacto. – byteptr

Respuesta

2

Su mejor opción es usar pdbstr.exe de MS directamente. Permite extraer directamente, actualizar y diversificar otras funciones directamente, independientemente de la versión del compilador (hasta la última versión compatible, que creo que es VS2013 en este momento). Lo usamos para agregar enlaces SVN directamente a PDB que luego almacenamos en tiendas de símbolos locales usando srctool.

+0

Gracias! Es interesante ver que esta utilidad utiliza Alternate Data Stream (ADS) ... "para insertar la información de control de versión en la secuencia alternativa" srcsrv "del archivo .pdb de destino". – mox

+0

¿Qué sería una línea de comando de ejemplo para usar pdbstr.exe? Incluso con los documentos, no pude entender cómo quitarle el camino. – byteptr

+0

@byteptr Perdón por la respuesta tardía. Utilizamos un script Poweshell para construir nuestro nuevo bloque en un archivo de flujo temporal ($ streamContent), y luego llamamos al ejecutable directamente así: . "$ ToolPath" /pdbstr.exe -w -s: srcsrv "-p: $ pdbFullName" "-i: $ streamContent" Esto agrega la secuencia dada como una secuencia srcsrv al pdb especificado en $ pdbFullName, que incluye el camino y todo eso. – Woody14619

0

Para las versiones más recientes link.exe, la sintaxis ha cambiado.

La opción que desea es ahora /pdbaltpath:%_PDB%

Está documentado en MSDN: https://msdn.microsoft.com/en-us/library/dd998269.aspx

%_PDB% expande al nombre de archivo del archivo .pdb real sin ningún tipo de información de la ruta

Para VC6, es posible que desee seguir utilizando los mismos compiladores pero una nueva versión de link.exe.

Los juegos de controladores de Windows también vienen con una herramienta llamada binplace.exe que puede modificar esta información después de la compilación.

+0

Esto parece estar roto para bibliotecas estáticas.LNK4044: opción no reconocida '/ pdbaltpath:% _ PDB%'; ignorado – syplex

+0

@syplex: ¿Qué versión del enlazador estás usando? ¿Y qué tienen que ver las bibliotecas estáticas con tu problema? –

+0

Probé algunas versiones. Hasta la versión 14.12.25835.0. Tratando de averiguar cómo especificar o alterar la ruta de PDB para una biblioteca estática. La ruta está incrustada en .lib como lo es para DLL/EXEs (aunque de manera diferente), pero no hay forma de modificarlo. Esperaría que algo como PDBALTPATH ​​funcione para esto, pero no he encontrado nada. – syplex

Cuestiones relacionadas