Pergunta

Eu estou usando uma biblioteca de CGAL que durante a fase de ligação da minha compilação de código produz uma grande quantidade de ligando avisos desta 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

Como faço para desativar este aviso específico vinculador em Visual C ++ / Studio 2008?

Note que eu não tenho nenhum controle sobre a biblioteca externa (CGAL) que eu estou usando. Não posso / donot quero entrar em recompilar a biblioteca externa. Daí, a necessidade de corrigir as mensagens no meu final.

Foi útil?

Solução

Adicione a seguinte como uma opção de vinculador adicionais:

 /ignore:4099

Esta é em Propriedades-> Linker-> linha de comando

Outras dicas

Atualização 2018/10/16

Alegadamente, a partir de VS 2013, este aviso pode ser desativado. Veja o comentário de @ Mark Ransom.

Resposta Original

Você não pode desativar esse aviso específico.

De acordo com a Geoff Chappell a advertência 4099 é tratado como se é demasiado importante para ser ignorado, mesmo usando em conjunto com / wx (que iria tratar avisos como erros e ignorar o aviso especificado em outras situações)

Aqui está o texto relevante do link:

Não é bem Avisos Unignorable

Para alguns números de alerta, a especificação em um / ignore opção é aceito, mas não necessariamente posta em prática. Deve ocorrer a advertência enquanto o wx / opção não estiver ativo, a mensagem de aviso ainda é exibido, mas se a opção / wx estiver ativo, o aviso é ignorados. É como se o aviso é pensado bastante importante substituir uma tentativa de ignorá-lo, mas não se o usuário colocou demasiado um preço alto em advertências unignored.

Os seguintes números de alerta são afetados:

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

(Para o registro e antes de o fio desaparece nos fóruns do MSDN) Você não pode desativar o aviso (pelo menos sob VS2010), porque ele está na lista das advertências de que não pode ser desativado (so / wd4099 não vai funcionar), mas o que você pode fazer é em vez de patch Link.exe (normalmente C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ Link.exe) para removê-lo da referida lista. Soa como uma britadeira, eu sei. Ele funciona embora.

Por exemplo, se você deseja remover o aviso para 4099, Link.exe aberta com um editor hexadecimal, Goto linha 15A0 que lê 03 10 (little endian para 4099) e substituí-lo por FF 00 (que não existe. )

Para o benefício de outros, eu embora eu incluir o que eu fiz.

Desde que você não pode obter Visual Studio (2010 no meu caso) para ignorar os avisos LNK4204, a minha abordagem foi a de dar-lhe o que queria: os arquivos PDB. Como eu estava usando bibliotecas de código aberto no meu caso, eu tenho o código de construção dos arquivos PDB já.

Mas, o padrão é nomear todos os arquivos PDF a mesma coisa: vc100.pdb no meu caso. Como você precisa de um PDB para cada lib, isso cria um problema, especialmente se você estiver usando algo como Imagemagick, que cria cerca de 20 arquivos .lib estáticos. Você não pode ter 20 arquivos lib em um diretório (que referências vinculador do seu aplicativo para ligação nas bibliotecas de) e ter todos os 20 ficheiros.pdb chamado a mesma coisa.

A minha solução era ir e reconstruir meus arquivos de biblioteca estática, e configure VS2010 para nomear o arquivo PDB com relação ao projeto. Desta forma, cada lib recebe um PDB de nome semelhante, e você pode colocar todas as libs e PDBs em um diretório para o seu projeto para uso.

Assim, para o configuraton "Debug", eu editei:

Propriedades> Propriedades de Configuração -> C / C ++ -> Saída Files -> Programa de Banco de Dados Nome do arquivo de

$ (IntDir) vc $ (PlatformToolsetVersion) .pdb

para ser o seguinte valor:

$ (OutDir) vc $ (PlatformToolsetVersion) D $ (ProjectName) .pdb

Agora, em vez de em algum lugar no diretório intermediário, os ficheiros.pdb são gravados no diretório de saída, onde os arquivos .lib também estão sendo escrito, e mais importante, eles são nomeados com o sufixo D + nome do projeto . Isto significa que cada biblioteca projecto produduces um lib projeto e um PDB de projeto específico.

Agora sou capaz de copiar todos os arquivos de minha libertação lib, meus arquivos .lib depuração e arquivos de depuração PDB em um lugar no meu sistema de desenvolvimento, eo projeto que usa essa biblioteca parte 3 no modo de depuração, tem os arquivos PDB de que necessita no modo de depuração.

Eu suspeito / ignore é uma opção VC6 Link.exe. para vinculador do VS2005 e VS2008 há nenhum está documentado / ignore opção disponível, mas os olhares vinculador simplesmente ignorar o "/ ignore: XXX". opção, nenhum erro e nenhum efeito

O arquivo PDB é normalmente usado para armazenar informações de depuração. Esta advertência é causada provavelmente porque o vc80.pdb arquivo não for encontrado quando liga o arquivo objeto de destino. Leia a entrada do MSDN sobre LNK4099 aqui .

Como alternativa, você pode desativar a geração de informações de depuração das Propriedades do projeto> Linker> Depuração> Gerar campo Debug Info.

EDIT: não use vc80 / Visual Studio 2005, mas Visual Studio 2008 / vc90 versões da biblioteca CGAL (talvez a partir aqui ).

Ferramentas vinculador aviso LNK4099 :

Você também pode compilar com / Z7, de modo APO não precisa ser utilizado, ou remova a opção / Debug vinculador se não tem ficheiros.pdb para os objetos você está ligando.

Você não pode desativar o aviso vinculador 4099, como disse @ John Weldon.

Você deve reconstruir biblioteca com algumas mudanças de configuração do projeto. Você tem várias opções:

  • Salvar arquivo PDB com informações de depuração é mesma pasta onde você salvar o arquivo .lib. Ajuste o valor "$ (OutDir) $ (TargetName) PDB" para Propriedades-> C / C ++ -> Saída Arquivos-Programa de Banco de Dados Nome do arquivo
  • Salvar informações de depuração no arquivo lib. Definir valor "C7 compatível (/ Z7)" para Propriedades-> C / C ++ -> Geral-> Debug Information Format
  • informações de geração de depuração Desativar para esta biblioteca. Remove valor de Propriedades-> C / C ++ -> Geral-> Debug Information Format
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top