Domanda

Sto usando una libreria di CGAL che durante la fase di collegamento della mia compilazione di codice produce molti avvisi di collegamento di questo modulo:

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

Come posso disattivare questo specifico avviso linker in Visual C ++ / Studio 2008?

Nota che non ho alcun controllo sulla libreria esterna (CGAL) che sto usando. Non riesco / non voglio iniziare a ricompilare la libreria esterna. Quindi, la necessità di correggere i messaggi alla mia fine.

È stato utile?

Soluzione

Aggiungi quanto segue come opzione linker aggiuntiva:

 /ignore:4099

Questo è in Proprietà - > Linker - > Riga di comando

Altri suggerimenti

Aggiornamento 16-10-2015

Secondo quanto riferito, a partire da VS 2013, questo avviso può essere disabilitato. Vedi il commento di @Mark Ransom.

Risposta originale

Non puoi disabilitare quell'avviso specifico.

Secondo Geoff Chappell l'avvertenza 4099 è trattato come se fosse troppo importante per essere ignorato, anche usando insieme a / wx (che tratterà gli avvisi come errori e ignorerebbe l'avvertimento specificato in altre situazioni)

Ecco il testo pertinente dal link:

  

Avvisi non abbastanza non segnalabili

     

Per alcuni numeri di avviso, la specifica in un'opzione / ignore è   accettato ma non necessariamente attuato. In caso di avviso   mentre l'opzione / wx non è attiva, il messaggio di avviso rimane fermo   visualizzato, ma se l'opzione / wx è attiva, l'avviso è   ignorato. È come se l'avvertimento fosse ritenuto abbastanza importante da   sovrascrivere un tentativo di ignorarlo, ma non se anche l'utente lo ha inserito   un prezzo elevato per gli avvisi non firmati.

     

Sono interessati i seguenti numeri di avviso:

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

(Per la cronaca e prima che il thread scompaia nei forum msdn) Non è possibile disabilitare l'avviso (almeno in VS2010) perché è nell'elenco degli avvisi che non può essere disabilitato (quindi / wd4099 non funzionerà), ma quello che si può fare invece è patch link.exe (di solito C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe) per rimuoverlo da tale elenco. Sembra un martello pneumatico, lo so. Funziona però.

Ad esempio, se si desidera rimuovere l'avviso per 4099, aprire link.exe con un editor esadecimale, andare alla riga 15A0 che legge 03 10 (little endian per 4099) e sostituirlo con FF 00 (che non esiste. )

A beneficio degli altri, ho pensato di includere ciò che ho fatto.

Dato che non è possibile far sì che Visual Studio (2010 nel mio caso) ignori gli avvisi di LNK4204, il mio approccio è stato quello di dargli quello che voleva: i file pdb. Mentre stavo usando le librerie open source nel mio caso, ho già il codice che crea i file pdb.

MA, il default è nominare tutti i file PDF con la stessa cosa: vc100.pdb nel mio caso. Poiché hai bisogno di un .pdb per ogni singolo .lib, questo crea un problema, specialmente se stai usando qualcosa come ImageMagik, che crea circa 20 file .lib statici. Non puoi avere 20 file lib in una directory (a cui fa riferimento il linker dell'applicazione da cui collegare le librerie) e avere tutti i 20 file .pdb chiamati la stessa cosa.

La mia soluzione era quella di andare a ricostruire i file della mia libreria statica e configurare VS2010 per nominare il file .pdb rispetto a PROJECT. In questo modo, ogni .lib ottiene un nome .pdb simile e puoi mettere tutti i LIB e PDB in una directory da usare per il tuo progetto.

Quindi per " Debug " configurazione, ho modificato:

Proprietà - > Proprietà di configurazione - > C / C ++ - & Gt; File di output - & Gt; Nome file di database del programma da

$ (IntDir) vc $ (PlatformToolsetVersion) PDB

essere il seguente valore:

$ (OutDir) vc $ (PlatformToolsetVersion) D $ (ProjectName) PDB

Ora invece che da qualche parte nella directory intermedia, i file .pdb vengono scritti nella directory di output, dove vengono scritti anche i file .lib, e, soprattutto, vengono denominati con un suffisso D + nome del progetto . Ciò significa che ogni libreria progetto produce un progetto .lib e un progetto specifico .pdb.

Ora sono in grado di copiare tutti i miei file .lib di rilascio, i miei file .lib di debug e i file .pdb di debug in un'unica posizione sul mio sistema di sviluppo e il progetto che utilizza quella libreria di terze parti in modalità debug, ha i file pdb necessari in modalità debug.

Sospetto / ignoro è un'opzione VC6 link.exe. per il linker di VS2005 e VS2008 non è disponibile alcuna opzione documentata / ignora, ma il linker sembra semplicemente ignorare " / ignore: XXX " opzione, nessun errore e nessun effetto.

Il file PDB viene in genere utilizzato per archiviare informazioni di debug. Questo avviso è probabilmente dovuto al fatto che il file vc80.pdb non è stato trovato durante il collegamento del file oggetto di destinazione. Leggi la voce MSDN su LNK4099 qui .

In alternativa, puoi disattivare la generazione delle informazioni di debug da Project Properties > Linker & Gt; Debug & Gt; Genera campo Informazioni debug.

EDIT: non utilizzare vc80 / Visual Studio 2005, ma le versioni Visual Studio 2008 / vc90 della libreria CGAL (forse da qui ).

Avviso strumenti Linker LNK4099 :

  

Puoi anche compilare con / Z7, quindi   non è necessario utilizzare il pdb o   rimuovere l'opzione di collegamento / DEBUG se   non hanno file .pdb per gli oggetti   stai collegando.

Non è possibile disabilitare l'avviso linker 4099, come detto @ John Weldon.

Dovresti ricostruire la libreria con alcune modifiche alla configurazione del progetto. Hai diverse opzioni:

  • Salva il file PDB con le informazioni di debug è la stessa cartella in cui si salva il file .lib. Imposta il valore & Quot; $ (OutDir) $ (TargetName) .pdb & Quot; alle proprietà - > C / C ++ - > Nome file del file di database del programma di output
  • Salva le informazioni di debug nel file .lib. Impostare il valore & Quot; C7 compatibile (/ Z7) & Quot; alle proprietà - > C / C ++ - > Generale - > Formato informazioni di debug
  • Disabilita le informazioni di debug di generazione per questa libreria. Rimuovi valore da Proprietà - & Gt; C / C ++ - & Gt; Generale - & Gt; Formato informazioni di debug
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top