Estou usando uma biblioteca CGAL que, durante o estágio de vinculação de minha compilação de código, produz muitos avisos de vinculação neste formato:
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 eu desativo este aviso de vinculador específico em Visual C ++ / Studio 2008?
Observe que não tenho nenhum controle sobre a biblioteca externa (CGAL) que estou usando. Não posso / não quero recompilar a biblioteca externa. Daí a necessidade de consertar as mensagens do meu lado.
visual-studio
visual-c++
linker
warnings
cgal
Ashwin Nanjappa
fonte
fonte
/ignore:4099
funciona bem no Visual Studio 10 com C ++. Recebi o avisoLNK4099: PDB 'vc100.pdb' was not found with 'gtest_main-mdd.lib(gtest_main.obj)
e consegui removê-lo dessa forma.Respostas:
Adicione o seguinte como uma opção de vinculador adicional:
Isso está em Propriedades-> Linker-> Linha de Comando
fonte
Atualização 16/10/2018
Alegadamente, a partir do 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 Geoff Chappell, o aviso 4099 é tratado como se fosse muito importante para ser ignorado, mesmo usando em conjunto com / wx (que trataria os avisos como erros e ignoraria o aviso especificado em outras situações)
Aqui está o texto relevante do link:
fonte
(Para registro e antes que o tópico desapareça nos fóruns do msdn) Você não pode desativar o aviso (pelo menos no VS2010) porque ele está na lista de avisos que não podem ser desativados (então / wd4099 não funcionará) , mas o que você pode fazer em vez disso é corrigir o link.exe (geralmente C: \ Arquivos de programas (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe) para removê-lo da lista. Parece uma britadeira, eu sei. Mas funciona.
Por exemplo, se você quiser remover o aviso de 4099, abra link.exe com um editor hexadecimal, vá para a linha 15A0 que lê 03 10 (little endian para 4099) e substitua-o por FF 00 (que não existe).
fonte
Para o benefício de outros, pensei em incluir o que fiz.
Como você não consegue fazer o Visual Studio (2010 no meu caso) ignorar os avisos do LNK4204, minha abordagem foi dar a ele o que ele queria: os arquivos pdb. Como estava usando bibliotecas de código aberto no meu caso, já tenho o código compilando os arquivos PDB.
MAS, o padrão é nomear todos os arquivos PDF da mesma forma: 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 o ImageMagik, que cria cerca de 20 arquivos .lib estáticos. Você não pode ter 20 arquivos lib em um diretório (ao qual o vinculador do seu aplicativo faz referência para vincular nas bibliotecas) e todos os 20 arquivos .pdb são chamados da mesma coisa.
Minha solução foi reconstruir meus arquivos de biblioteca estática e configurar o VS2010 para nomear o arquivo .pdb com relação ao PROJETO. Dessa forma, cada .lib obtém um nome semelhante .pdb, e você pode colocar todos os LIBs e PDBs em um diretório para seu projeto usar.
Portanto, para a configuração "Debug", editei:
Propriedades-> Propriedades de configuração -> C / C ++ -> Arquivos de saída -> Nome do arquivo do banco de dados do programa 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 arquivos .pdb são gravados no diretório de saída, onde os arquivos .lib também estão sendo gravados E, o mais importante, eles são nomeados com um sufixo de nome de projeto D + . Isso significa que cada projeto de biblioteca produz um .lib de projeto e um .pdb específico de projeto.
Agora posso copiar todos os meus arquivos .lib de lançamento, meus arquivos .lib de depuração e os arquivos .pdb de depuração em um único lugar no meu sistema de desenvolvimento, e o projeto que usa essa biblioteca de terceiros no modo de depuração tem o pdb arquivos necessários no modo de depuração.
fonte
Eu suspeito / ignore é uma opção VC6 link.exe. para o vinculador do VS2005 e do VS2008 não há opção documentado / ignorar disponível, mas o vinculador parece apenas ignorar a opção "/ ignore: XXX", sem erro e sem efeito.
fonte
O arquivo PDB é normalmente usado para armazenar informações de depuração. Este aviso é causado provavelmente porque o arquivo
vc80.pdb
não foi encontrado ao vincular o arquivo do objeto de destino. Leia a entrada MSDN sobre LNK4099 aqui .Como alternativa, você pode desativar a geração de informações de depuração no campo Propriedades do projeto> Vinculador> Depuração> Gerar informações de depuração.
fonte
EDIT: não use vc80 / Visual Studio 2005, mas Visual Studio 2008 / vc90 versões da biblioteca CGAL (talvez de aqui ).
Aviso de ferramentas de vinculação LNK4099 :
fonte
Você não pode desativar o aviso do vinculador 4099, como disse @John Weldon.
Você deve reconstruir a biblioteca com algumas mudanças na configuração do projeto. Você tem várias opções:
fonte