Saya menulis entri blog tentang ini, ketika saya menghadapi masalah yang menjengkelkan ini, dan akhirnya menarik sistem saya kembali ke urutan kerja.
Ini adalah hal-hal yang perlu diperiksa, dalam urutan ini:
Periksa opsi properti Anda di pengaturan tautan Anda di: Properti> Properti Konfigurasi> Linker> Tingkat Lanjut> Mesin Target. Pilih MachineX64 jika Anda menargetkan build 64 bit, atau MachineX86 jika Anda membuat build 32 bit.
Pilih Build> Configuration Manager dari menu utama di visual studio. Pastikan proyek Anda memiliki platform yang benar. Dimungkinkan untuk IDE diatur untuk membangun x64 tetapi proyek individu dalam solusi dapat diatur ke target win32. Jadi ya, studio visual meninggalkan banyak tali untuk menggantung diri, tapi itulah kehidupan.
Periksa file perpustakaan Anda apakah itu benar-benar jenis penargetan platform. Ini dapat digunakan dengan menggunakan dumpbin.exe yang ada di direktori VC \ bin visual studio Anda. gunakan opsi-header untuk membuang semua fungsi Anda. Cari entri mesin untuk setiap fungsi. harus menyertakan x64 jika versi 64 bit.
Di studio visual, pilih Peralatan> Pilihan dari menu utama. pilih Proyek dan Solusi> Direktori VC ++. Pilih x64 dari dropdown Platform. Pastikan entri pertama adalah: $ (VCInstallDir) \ bin \ x86_amd64 diikuti oleh $ (VCInstallDir) \ bin .
Setelah saya lakukan langkah 4 semuanya bekerja lagi untuk saya. Masalahnya adalah saya menghadapi masalah ini pada semua proyek saya di mana saya ingin mengkompilasi target 64 bit.
Selain daftar C Johnson saya akan menambahkan poin berikut:
Periksa di Visual Studio:
Properti Proyek -> Properti Konfigurasi -> Linker -> Baris perintah.
"Opsi Tambahan" TIDAK boleh berisi
/machine:X86
Saya memiliki kunci seperti itu, dihasilkan oleh output CMake: CMake menghasilkan proyek x86, kemudian saya menambahkan platform x64 melalui
Configuration Manager
dalam Visual Studio 2010 - semuanya dibuat baik untuk platform baru kecuali bahwa baris perintah linker, ditentukan/machine:X86
secara terpisah.sumber
Saya mengalami masalah yang sama di VS2008 ketika saya mencoba menambahkan build X64 ke proyek yang dikonversi dari VS2003.
Saya melihat semua yang ditemukan ketika mencari kesalahan ini di Google (mesin Target, VC ++ Direktori, DUMPBIN ....) dan semuanya tampak OK.
Akhirnya saya membuat proyek pengujian baru dan melakukan perubahan yang sama dan sepertinya berhasil.
Melakukan perbedaan antara file vcproj mengungkapkan masalahnya ....
Proyek saya yang dikonversi memiliki / MESIN: i386 ditetapkan sebagai opsi tambahan yang diatur di bawah Linker-> Command Line. Jadi ada dua / opsi MESIN yang ditetapkan (baik x64 dan i386) dan yang tambahan mengambil preferensi.
Menghapus ini dan mengaturnya dengan benar di bawah Linker-> Advanced-> Target Machine membuat masalah menghilang.
sumber
Semua pengaturan proyek tampak sempurna, tetapi saya masih mendapatkan kesalahan. Melihat ke dalam
.vcxproj
file dan mencari "x86" mengungkapkan masalahnya:Pencarian cepat / ganti untuk semua kejadian (sepuluh pengaturan file individu) memperbaiki masalah.
sumber
Karena masalahnya adalah karena perbedaan dalam kompilasi dan spesifikasi mesin target (x86 & x64) Ikuti langkah-langkah di bawah ini:
Itu memecahkan masalah saya.
sumber
Anda mungkin memiliki satu file .OBJ atau .LIB yang ditargetkan untuk x64 (itulah jenis mesin modul) saat Anda menautkan untuk x86 (itulah jenis mesin target).
Gunakan DUMPBIN / HEADERS pada file .OBJ Anda dan periksa entri mesin di blok FILE HEADER VALUES.
sumber
Di Visual Studio 2012 +/-, halaman properti untuk "Properti Konfigurasi'.Linker." Baris Perintah "berisi kotak berlabel" Opsi Tambahan ". Jika Anda sedang membangun x64, pastikan kotak itu tidak mengandung / MESIN: I386. Proyek saya berhasil dan menghasilkan kesalahan yang dipertanyakan.
sumber
Saya menemukan masalah ini ketika membangun QT. Instruksi yang saya baca di suatu tempat menyarankan agar saya mengkonfigurasi nmake menggunakan command prompt VS.
Saya memilih command prompt x64 dan melakukan konfigurasi tanpa banyak kesulitan. Ketika saya mencoba nmake, itu memberi kesalahan ini.
Saya pikir beberapa komponen sudah pre-built untuk 32-bit. Kesalahan bahkan melaporkan modul mana yang dibangun untuk x86.
Saya menggunakan prompt perintah VS 32 bit standar dan itu berhasil.
sumber
Dalam Visual Studio 2013,
1) Periksa di Halaman Properti Proyek / Properti Konfigurasi / Linker / Semua Opsi dan perbaiki semua mesin dan direktori yang dikonfigurasi.
2) Periksa di Halaman Properti Proyek / Properti Konfigurasi / Linker / Input dan perbaiki semua direktori yang tidak dikonfigurasi.
Lihat contoh 1)
sumber
file vcxproj dapat berisi 'MACHINE: i386' Edit file vcxproj dengan editor. Singkirkan !
sumber
Atur opsi kompilasi 64 bit
-m64 -cubin
Petunjuknya ada di compile log. Seperti ini:
Itu
"-machine 32"
masalah.Pertama atur opsi kompilasi 64bit, selanjutnya atur opsi kompilasi hybrid. Maka kamu dapat melihat berhasil.
sumber
Jika solusi Anda memiliki proyek Lib, periksa properti Mesin Target di Properti-> Pustakawan-> Umum
sumber
Selain daftar Jhonson, periksa juga folder perpustakaan
Di studio visual, pilih Peralatan> Pilihan dari menu utama. pilih Proyek dan Solusi> Direktori VC ++. Pilih x64 dari dropdown Platform.
sumber
Ini terjadi pada saya hari ini karena saya telah menambahkan direktori perpustakaan saat masih dalam mode x86, dan secara tidak sengaja menghapus direktori yang diwarisi, menjadikannya sebagai hardcode. Kemudian setelah beralih ke x64, Direktori VC ++ saya masih membaca:
"...; $ (VC_LibraryPath_x86); $ (WindowsSDK_LibraryPath_x86);"
bukannya _x64.
sumber
$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;
Saya menggunakan CMake & kemudian menambahkan konfigurasi win32. Halaman properti menunjukkan x86 tetapi sebenarnya ketika membuka file vcxproj di editor teks itu x64! Mengubah secara manual ke x86 menyelesaikan masalah ini.
sumber
Ini adalah masalah yang sangat menyebalkan dan menyebalkan, tetapi begitu Anda memahaminya, itu cukup sederhana: Anda memiliki beberapa elemen di dalam bangunan yang Anda bangun dengan tipe arsitektur satu (dalam kasus Anda x64) meskipun faktanya itu adalah target untuk tipe lain (katakanlah x86 ).
Anda dapat membedah sumber masalah Anda dengan melihat file obj mana yang menyebabkan crash dan mulai mencari masalah di sana. Setiap obj akan memiliki analog kode sumber: baik dalam cpp, c, asm dll. Mungkin ada acara build khusus di sekitarnya yang menggunakan alat yang salah. Periksa itu di lembar properti.
Saya akan mencari di sana terlebih dahulu sebelum membahas daftar hal-hal yang harus dilakukan C Johnson.
sumber
Saya memecahkan masalah ini dengan mengubah Win32 ke * 64 di Visual Studio 2013.
sumber
jenis mesin modul adalah mesin yang Anda kompilasi dan jenis mesin target adalah arsitektur x86 atau x64 yang Anda buat binernya.
sumber
Masalah ini juga dapat terjadi jika proyek Anda diatur untuk memiliki direktori perantara yang sama di Properti Proyek -> Properti Konfigurasi -> Umum
sumber
Pertama-tama cobalah hal-hal berikut: 1. Manajer konfigurasi goto dan buat x64 baru jika belum ada. 2. pilih solusi x64. 3. pergi ke properti proyek dan kemudian Linker-> Advanced pilih mesin x64. 4. Sekarang buat kembali solusinya.
Jika masih Anda mendapatkan kesalahan yang sama. coba solusi bersih dan kemudian bangun kembali dan buka studio visual Anda akan mendapatkan daftar proyek yang baru dibuka, klik kanan pada proyek dan hapus dari sana. Sekarang pergi ke solusi dan buka kembali solusi.
sumber
ini terjadi pada saya ketika saya mengubah solusi VS2008 saya ke VS2010 & mengubah konfigurasi win32 ke X64, dalam solusi lama saya, saya punya mfcs90d.lib (Konfigurasi-> Linker-> Input-> dependensi tambahan), karena saya menggunakan VS010 saya baru saja memeriksa dalam folder VS2010 di mana itu adalah mfcs100d.lib, jadi saya mengubah mfcs90d.lib menjadi mfcs100d.lib di (Konfigurasi-> Tautan-> Input-> Ketergantungan tambahan) berfungsi dengan baik.
sumber
Bagi mereka yang bersama QT Creator, masalahnya sama (seperti yang dijelaskan oleh @ c-johnson). Pastikan pengaturan kompiler untuk MSVC di kit Anda diatur ke x86 seperti yang ditunjukkan di bawah ini.
sumber
untuk beberapa yang menggunakan command prompt (dos prompt) ini mungkin bermanfaat:
Juga Jika Anda suka ini:
CL "% 1% 2% 3" / EHsc / tautan user32.lib Gdi32.lib Winmm.lib comctl32.lib * .obj / SUBSYSTEM: CONSOLE / MESIN: x86
Anda harus del * .obj sebelumnya ; untuk menghindari tautan yang membingungkan dengan objek 64 dan 32 bit yang tersisa dari kompilasi sebelumnya?
sumber
Banyak saran bagus di atas.
Juga jika Anda mencoba membangun di x86 Win32:
Pastikan bahwa semua pustaka yang Anda tautkan dalam Program Files (x86) sebenarnya adalah pustaka x86 karena belum tentu ...
Misalnya file lib yang saya tautkan dalam C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Professional \ SDK melemparkan kesalahan itu, akhirnya saya menemukan versi x86 dalam C: \ Program Files (x86) \ Windows Kit \ 10 \ Lib \ 10.0.18362.0 \ um \ x86 dan semuanya bekerja dengan baik.
sumber
apa OSnya? jika itu adalah windows x64 maka Anda perlu memastikan bahwa CUDA x64 diinstal dan dengan demikian VS2008 harus mengkompilasi proyek dalam mode x64 ...
CUDA hanya akan menginstal x64 OR x86 di windows
sumber