Saya menggunakan pustaka dari CGAL yang selama tahap penautan kompilasi kode saya menghasilkan banyak peringatan penautan dalam bentuk ini:
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
Bagaimana cara menonaktifkan peringatan linker khusus ini di bawah Visual C ++ / Studio 2008?
Perhatikan bahwa saya tidak memiliki kontrol apa pun pada pustaka eksternal (CGAL) yang saya gunakan. Saya tidak bisa / tidak ingin mengkompilasi ulang perpustakaan eksternal. Oleh karena itu, kebutuhan untuk memperbaiki pesan di akhir saya.
visual-studio
visual-c++
linker
warnings
cgal
Ashwin Nanjappa
sumber
sumber
/ignore:4099
berfungsi dengan baik di Visual Studio 10 dengan C ++. Saya mendapat peringatanLNK4099: PDB 'vc100.pdb' was not found with 'gtest_main-mdd.lib(gtest_main.obj)
dan berhasil menghapusnya dengan cara ini.Jawaban:
Tambahkan yang berikut ini sebagai opsi penaut tambahan:
Ini ada di Properties-> Linker-> Command Line
sumber
Perbarui 2018-10-16
Kabarnya, mulai VS 2013, peringatan ini bisa dinonaktifkan. Lihat komentar oleh @Mark Ransom.
Jawaban Asli
Anda tidak dapat menonaktifkan peringatan khusus itu.
Menurut Geoff Chappell , peringatan 4099 diperlakukan seolah-olah terlalu penting untuk diabaikan, bahkan jika digunakan bersama dengan / wx (yang akan menganggap peringatan sebagai kesalahan dan mengabaikan peringatan yang ditentukan dalam situasi lain)
Berikut teks yang relevan dari tautan:
sumber
(Sebagai catatan dan sebelum utas menghilang di forum msdn) Anda tidak dapat menonaktifkan peringatan (setidaknya di bawah VS2010) karena ada di daftar peringatan yang tidak dapat dinonaktifkan (jadi / wd4099 tidak akan berfungsi) , tetapi yang dapat Anda lakukan adalah menambal link.exe (biasanya C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe) untuk menghapusnya dari daftar tersebut. Kedengarannya seperti jackhammer, saya tahu. Itu berhasil.
Misalnya, jika Anda ingin menghapus peringatan untuk 4099, buka link.exe dengan editor hex, goto baris 15A0 yang bertuliskan 03 10 (little endian untuk 4099) dan ganti dengan FF 00 (yang tidak ada.)
sumber
Untuk kepentingan orang lain, saya pikir saya akan memasukkan apa yang saya lakukan.
Karena Anda tidak bisa mendapatkan Visual Studio (2010 dalam kasus saya) untuk mengabaikan peringatan LNK4204, pendekatan saya adalah memberikan apa yang diinginkannya: file pdb. Karena saya menggunakan pustaka sumber terbuka dalam kasus saya, saya sudah memiliki kode untuk membangun file pdb.
TAPI, defaultnya adalah menamai semua file PDF dengan hal yang sama: vc100.pdb dalam kasus saya. Karena Anda memerlukan .pdb untuk setiap .lib, ini menimbulkan masalah, terutama jika Anda menggunakan sesuatu seperti ImageMagik, yang membuat sekitar 20 file .lib statis. Anda tidak dapat memiliki 20 file lib dalam satu direktori (yang direferensikan oleh linker aplikasi Anda untuk ditautkan di perpustakaan) dan memiliki semua 20 file .pdb yang disebut sama.
Solusi saya adalah pergi dan membangun kembali file perpustakaan statis saya, dan mengkonfigurasi VS2010 untuk memberi nama file .pdb sehubungan dengan PROYEK tersebut. Dengan cara ini, setiap .lib mendapatkan nama .pdb yang serupa, dan Anda dapat meletakkan semua LIB dan PDB dalam satu direktori untuk digunakan oleh proyek Anda.
Jadi untuk konfigurasi "Debug", saya mengedit:
Properti-> Properti Konfigurasi -> C / C ++ -> File Output -> Nama File Database Program dari
$ (IntDir) vc $ (PlatformToolsetVersion) .pdb
menjadi nilai berikut:
$ (OutDir) vc $ (PlatformToolsetVersion) D $ (ProjectName) .pdb
Sekarang daripada di suatu tempat di direktori perantara, file .pdb ditulis ke direktori output, di mana file .lib juga sedang ditulis, DAN yang terpenting, mereka diberi nama dengan akhiran nama proyek D + . Ini berarti setiap proyek perpustakaan menghasilkan proyek .lib dan .pdb khusus proyek.
Saya sekarang dapat menyalin semua file rilis .lib saya, file debug .lib saya dan file debug .pdb ke satu tempat di sistem pengembangan saya, dan proyek yang menggunakan pustaka pihak ketiga dalam mode debug, memiliki pdb file yang dibutuhkan dalam mode debug.
sumber
Saya menduga / mengabaikan adalah opsi link.exe VC6. untuk linker VS2005 dan VS2008 tidak ada opsi yang didokumentasikan / abaikan, tetapi linker terlihat mengabaikan opsi "/ abaikan: XXX", tidak ada kesalahan dan tidak ada efek.
sumber
File PDB biasanya digunakan untuk menyimpan informasi debug. Peringatan ini mungkin disebabkan karena file
vc80.pdb
tidak ditemukan saat menautkan file objek target. Baca entri MSDN di LNK4099 di sini .Alternatifnya, Anda dapat menonaktifkan pembuatan informasi debug dari Project Properties> Linker> Debugging> Generate Debug Info field.
sumber
EDIT: jangan gunakan vc80 / Visual Studio 2005, tapi versi Visual Studio 2008 / vc90 dari perpustakaan CGAL (mungkin dari sini ).
Peringatan Alat Linker LNK4099 :
sumber
Anda tidak dapat menonaktifkan peringatan linker 4099, seperti yang dikatakan @John Weldon.
Anda harus membangun kembali perpustakaan dengan beberapa perubahan konfigurasi proyek. Anda memiliki beberapa opsi:
sumber