Używam biblioteki z CGAL, która na etapie linkowania mojej kompilacji kodu generuje wiele ostrzeżeń dotyczących linkowania w tej postaci:
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
Jak wyłączyć to ostrzeżenie dotyczące konsolidatora w programie Visual C ++ / Studio 2008?
Zauważ, że nie mam żadnej kontroli nad biblioteką zewnętrzną (CGAL), której używam. Nie mogę / nie chcę brać udziału w ponownej kompilacji biblioteki zewnętrznej. Stąd potrzeba naprawienia wiadomości po mojej stronie.
visual-studio
visual-c++
linker
warnings
cgal
Ashwin Nanjappa
źródło
źródło
/ignore:4099
działa dobrze w programie Visual Studio 10 z C ++. Otrzymałem ostrzeżenieLNK4099: PDB 'vc100.pdb' was not found with 'gtest_main-mdd.lib(gtest_main.obj)
i udało mi się je w ten sposób usunąć.Odpowiedzi:
Dodaj następujące opcje jako dodatkową opcję konsolidatora:
To jest w Właściwości-> Konsolidator-> Wiersz poleceń
źródło
Aktualizacja 2018-10-16
Podobno od VS 2013 to ostrzeżenie można wyłączyć. Zobacz komentarz @Mark Ransom.
Oryginalna odpowiedź
Nie możesz wyłączyć tego konkretnego ostrzeżenia.
Według Geoffa Chappella ostrzeżenie 4099 jest traktowane tak, jakby było zbyt ważne, aby je zignorować, nawet używając w połączeniu z / wx (co potraktuje ostrzeżenia jako błędy i zignoruje określone ostrzeżenie w innych sytuacjach)
Oto odpowiedni tekst z linku:
źródło
(Dla porządku i zanim wątek zniknie na forach msdn) Nie możesz wyłączyć ostrzeżenia (przynajmniej pod VS2010), ponieważ znajduje się na liście ostrzeżeń, których nie można wyłączyć (więc / wd4099 nie będzie działać) , ale zamiast tego możesz zrobić patch link.exe (zwykle C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe), aby usunąć go z tej listy. Wiem, brzmi jak młot pneumatyczny. Ale działa.
Na przykład, jeśli chcesz usunąć ostrzeżenie dla 4099, otwórz link.exe za pomocą edytora szesnastkowego, przejdź do wiersza 15A0, który czyta 03 10 (little endian dla 4099) i zamień go na FF 00 (który nie istnieje).
źródło
Pomyślałem, że dla dobra innych uwzględnię to, co zrobiłem.
Ponieważ nie możesz zmusić Visual Studio (w moim przypadku 2010) do ignorowania ostrzeżeń LNK4204, moim podejściem było zapewnienie mu tego, czego chciał: plików pdb. Ponieważ w moim przypadku korzystałem z bibliotek open source, mam już kod budujący pliki pdb.
ALE, domyślnie wszystkie pliki PDF są nazwane tak samo: w moim przypadku vc100.pdb. Ponieważ potrzebujesz pliku .pdb dla każdego pliku .lib, stwarza to problem, szczególnie jeśli używasz czegoś takiego jak ImageMagik, który tworzy około 20 statycznych plików .lib. Nie możesz mieć 20 plików lib w jednym katalogu (do którego linker twojej aplikacji odwołuje się w bibliotekach) i mieć wszystkie 20 plików .pdb o nazwie to samo.
Moim rozwiązaniem było odbudowanie plików biblioteki statycznej i skonfigurowanie VS2010 tak, aby nazwał plik .pdb w odniesieniu do PROJEKTU. W ten sposób każdy plik .lib otrzymuje podobnie nazwany plik .pdb i możesz umieścić wszystkie biblioteki LIB i PDB w jednym katalogu do wykorzystania przez projekt.
Tak więc dla konfiguracji „Debugowanie” zmodyfikowałem:
Właściwości -> Właściwości konfiguracji -> C / C ++ -> Pliki wyjściowe -> Nazwa pliku bazy danych programu z
$ (IntDir) vc $ (PlatformToolsetVersion) .pdb
być następującą wartością:
$ (OutDir) vc $ (PlatformToolsetVersion) D $ (ProjectName) .pdb
Teraz, zamiast gdzieś w katalogu pośrednim, pliki .pdb są zapisywane do katalogu wyjściowego, w którym zapisywane są również pliki .lib, ORAZ, co najważniejsze, są one nazywane z przyrostkiem nazwy projektu D + . Oznacza to, że każdy projekt biblioteki wytwarza projekt .lib i plik .pdb specyficzny dla projektu.
Teraz mogę skopiować wszystkie moje pliki .lib wydania, pliki debugowania .lib i pliki debugowania .pdb w jedno miejsce w moim systemie programistycznym, a projekt, który korzysta z tej biblioteki innej firmy w trybie debugowania, ma pdb pliki, których potrzebuje w trybie debugowania.
źródło
Podejrzewam / ignoruję, że jest to opcja link.exe VC6. dla konsolidatora VS2005 i VS2008 nie ma udokumentowanej opcji / ignoruj, ale wygląda na to, że konsolidator ignoruje opcję "/ ignore: XXX", bez błędu i bez efektu.
źródło
Plik PDB jest zwykle używany do przechowywania informacji debugowania. To ostrzeżenie jest prawdopodobnie spowodowane tym, że plik
vc80.pdb
nie został znaleziony podczas łączenia z docelowym plikiem obiektu. Przeczytaj wpis MSDN na temat LNK4099 tutaj .Alternatywnie można wyłączyć generowanie informacji debugowania w polu Właściwości projektu> Konsolidator> Debugowanie> Generuj informacje debugowania.
źródło
EDIT: nie używać vc80 / Visual Studio 2005, ale Visual Studio 2008 / vc90 wersje biblioteki CGAL (być może z tutaj ).
Ostrzeżenie narzędzi konsolidatora LNK4099 :
źródło
Nie można wyłączyć ostrzeżenia konsolidatora 4099, jak powiedział @John Weldon.
Należy przebudować bibliotekę z pewnymi zmianami konfiguracji projektu. Masz kilka możliwości:
źródło