LNK2005 kesalahan terjadi ketika CRT perpustakaan dan perpustakaan MFC terhubung dalam urutan yang salah dalam Visual C++

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 148652 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Ketika perpustakaan C Run-Time (CRT) dan Microsoft Foundation Kelas (MFC) perpustakaan yang terkait dalam urutan yang salah, Anda mungkin menerima salah satu dari kesalahan LNK2005 berikut:
nafxcwd.lib(afxmem.obj): kesalahan LNK2005:
"Batal * __cdecl operator baru (unsigned int)" (??2@YAPAXI@Z) sudah
didefinisikan dalam LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj): kesalahan LNK2005:
"void __cdecl operator DELETE(void *) "(??3@YAXPAX@Z) sudah ditentukan
di LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj): kesalahan LNK2005:
"Batal * __cdecl operator baru (unsigned int, int, char const *, int)"
(??2@YAPAXIHPBDH@Z) sudah ditentukan di LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj): kesalahan LNK2005: _DllMain@12 yang sudah didefinisikan dalam
MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj): kesalahan LNK2005: _DllMain@12 yang sudah didefinisikan dalam
msvcrtd.lib(dllmain.obj)

PENYEBAB

Perpustakaan CRT menggunakan lemah hubungan eksternal untuk baru, Hapus, dan DllMain fungsi. Perpustakaan MFC juga berisi baru, Hapus, dan DllMain fungsi. Fungsi-fungsi ini memerlukan MFC perpustakaan untuk dihubungkan sebelum CRT perpustakaan terkait.

PEMECAHAN MASALAH

Ada dua cara untuk memecahkan masalah ini. Pertama Solusi melibatkan memaksa linker untuk link perpustakaan yang benar urutan. Solusi kedua memungkinkan Anda untuk menemukan modul yang menyebabkan masalah dan untuk memperbaikinya.

Catatan Langkah-langkah berikut berdasarkan Visual C++ 6.0.

Solusi satu: Kekuatan Linker untuk Link Perpustakaan dalam urutan yang benar

  1. Pada Projectmenu, klik Tataan.
  2. Dalam Pengaturan untuk melihat dariSeting Proyek kotak dialog, klik untuk memilih proyek konfigurasi yang semakin link kesalahan.
  3. Pada Link tab, klik untuk memilih Masukandalam Kategori combo box.
  4. Dalam Mengabaikan Perpustakaan kotak, masukkan nama perpustakaan (untuk contoh, Nafxcwd.lib;Libcmtd.lib).

    Catatan Linker baris perintah setara di /NOD:<library name=""></library>.
  5. Dalam Perpustakaan objek/modul kotak, Masukkan nama perpustakaan. Anda harus memastikan bahwa ini tidak terdaftar dalam urutan dan sebagai perpustakaan dua di garis (misalnya, Nafxcwd.lib Libcmtd.lib).
Untuk mengatur pilihan ini in Visual C++.NET, membaca "pengaturan Visual Properti proyek C++"topik bantuan online.

Solusi dua: Menemukan dan memperbaiki masalah modul

Untuk melihat urutan link perpustakaan saat ini, ikuti langkah berikut:
  1. Pada Projectmenu, klik Tataan.
  2. Dalam Pengaturan untuk melihat dariSeting Proyek kotak dialog, klik untuk memilih proyek konfigurasi yang semakin link kesalahan.
  3. Pada Link tab, jenis/ verbose: lib dalam Proyek pilihankotak.
  4. Membangun kembali proyek Anda. Perpustakaan akan tercantum dalam Keluaran jendela selama proses menghubungkan.

STATUS

Ini adalah aktivitas.

INFORMASI LEBIH LANJUT

Ketika Anda menggunakan MFC perpustakaan, Anda harus memastikan bahwa yang terhubung ke mereka sebelum perpustakaan CRT terhubung. Anda dapat melakukan ini dengan membuat yakin bahwa setiap file dalam proyek Anda termasuk Msdev\Mfc\Include\Afx.h pertama, baik secara langsung (# termasuk <afx.h>) atau tidak langsung (# termasuk» <stdafx.h>). Afx.h termasuk file pasukan urutan yang benar dari Perpustakaan, dengan menggunakan komentar c++ (lib,"<libname>") petunjuk. <b00></b00></libname></stdafx.h></afx.h>

Jika file sumber memiliki ekstensi .c, atau file telah .cpp ekstensi tetapi tidak menggunakan MFC, Anda dapat membuat dan menyertakan file header kecil (Forcelib.h) di atas modul. Header baru ini memastikan bahwa thelibrary pencarian urutan benar.

Visual c ++ tidak mengandung ini header file. Untuk membuat berkas ini, ikuti langkah berikut:
  1. Buka Msdev\Mfc\Include\Afx.h.
  2. Memilih baris antara #ifndef _AFX_NOFORCE_LIBS dan #endif / /! _AFX_NOFORCE_LIBS.
  3. Menyalin pilihan ke Windows Clipboard.
  4. Membuat file teks baru.
  5. Menyisipkan konten Clipboard ke dalam file baru ini.
  6. Simpan sebagai file Msdev\Mfc\Include\Forcelib.h.

Langkah-langkah untuk mereproduksi masalah in Visual C++.NET

  1. Mulai Microsoft Visual Studio.NET.
  2. Pada Berkas menu, titikBaru, lalu klik Project.
  3. Klik Visual C++ proyek di bawahJenis proyek, lalu klik Aplikasi MFCdi bawah Pola acu.
  4. Dalam Nama kotak teks, ketikQ148652.
  5. Dalam Lokasi kotak teks, ketikC:\Test, lalu klik Oke.
  6. Dalam MFC aplikasi Wizard kotak dialog, Klik Tipe aplikasi.
  7. Klik Dialog berbasis di bawahTipe aplikasi, lalu klik Menggunakan MFC statis Perpustakaan di bawah Penggunaan MFC.
  8. Klik Menyelesaikan.
  9. Dalam solusi Explorer, di bawah File sumberPilih semua file .cpp tiga.
  10. Klik kanan file yang dipilih tiga, dan kemudian klikHapus.
  11. Klik kanan File sumber, arahkan keTambahkan, lalu klik Menambah Item baru.
  12. Klik C++ file di bawahPola acu. Dalam Nama kotak teks, ketikAA. Klik Terbuka.
  13. Paste kode berikut dalam Aa.cpp file:
    int test(){new int; return 1;}
  14. Klik kanan File sumber, arahkan keTambahkan, lalu klik Tambahkan Item ada.
  15. Pilih file-file berikut:
    • Q148652.CPP
    • Q148652Dlg.CPP
    • stdafx.CPP
  16. Klik Terbuka.
  17. File yang Anda pilih pada langkah 15 muncul di bawahFile sumber.
  18. Pilih semua empat .cpp file di bawah Sumber File.
  19. Klik kanan berkas .cpp empat yang Anda pilih, dan kemudian Klik Properti.
  20. Memperluas Konfigurasi properti, dan kemudian memperluas C/C ++.
  21. Klik Precompiled header.
  22. Menetapkan Membuat/menggunakan Precompiled Headerproperti untuk Tidak menggunakan Precompiled header. KlikOke.
  23. Pada Bangun menu, klik Membangun kembali Solusi.

Properti

ID Artikel: 148652 - Kajian Terakhir: 15 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Kata kunci: 
kbsweptvs2008 kbtshoot kbarttypeinf kberrmsg kbprb kbmt KB148652 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:148652

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com