kesalahan fatal LNK1104: tidak dapat membuka file 'libboost_system-vc110-mt-gd-1_51.lib'

89

Sepertinya saya tidak bisa mendapatkan ini untuk bekerja. Saya membuat aplikasi konsol sederhana (yang bergantung pada websocket++perpustakaan) yang membutuhkan Boostperpustakaan .. tetapi ketika saya mencoba untuk mengkompilasi saya mendapatkan:

kesalahan fatal LNK1104: tidak dapat membuka file 'libboost_system-vc110-mt-gd-1_51.lib'

Namun, saya melakukan bjam yang membuat lib in (boost_root)/stage/libsdan saya menghubungkan path ke libs ke compiler C++/Additionnals includes.

Jika saya lihat di (boost_root)/stage/libsfile libboost_system-vc110-mt-gd-1_51.libtersebut tidak ada. Ini disebut libboost_system-vc110-mt-sgd-1_51.libsebagai gantinya.

Ada ide?

Rushino
sumber
1
Saya telah dapat membangun file libboost_system-vc110-mt-gd-1_51.lib melakukan build lengkap dengan bjam namun saya masih mendapatkan kesalahan.
Rushino
22
Buka VS2012 developer command prompt, buka direktori root boost Anda dan ketik bootstrap, lalu ketik b2dan Anda akan mendapatkan satu set lengkap file perpustakaan.
Jesse Good
Apakah Anda menambahkan jalur penyertaan dan jalur penaut ke proyek Anda?
Jesse Good
1
Apakah Anda membuat aplikasi dengan /MD?
Mahesh
Jika tidak masalah untuk mengunduh alih-alih mengkompilasi, dapatkan libs dari sini: code.ingres.com/boostlib/trunk/stage/lib
gorogm

Jawaban:

93

The C ++ → General → lain termasuk Direktori parameter untuk daftar direktori dimana compiler akan mencari file header.

Anda perlu memberi tahu penaut tempat mencari perpustakaan untuk ditautkan. Untuk mengakses pengaturan ini, klik kanan pada nama proyek di jendela Solution Explorer , lalu Properties → Linker → General → Additional Library Directories . Masuk di <boost_path>\stage\libsini (ini adalah jalur tempat pustaka berada jika Anda membuat Boost menggunakan opsi default).

Praetorian
sumber
dapatkah kamu menjelaskan padaku apa itu boost_path
ggsmartboy
1
@ggsmartboy Ini adalah jalur di mana file sumber dorongan berada (jalur yang sama yang Anda daftarkan di kompiler termasuk jalur sehingga dapat menemukan header dorongan). Jawabannya mengasumsikan bahwa Anda membangun boost sendiri (tidak menggunakan distribusi) menggunakan opsi build default.
Praetorian
Hebat. Membuatku sakit kepala juga. Mengapa saya sepertinya tidak dapat menemukan ini di dokumentasi pendorong (bahkan jika ada), saya tidak tahu! :)
absentmindeduk
2
Pengaturan yang dirujuk dalam jawaban ini ditemukan jika Anda mengklik kanan pada proyek dan memilih properti (untuk pemula seperti saya, mengklik kanan solusi, pergi ke Tools> Options dll. Pilihan tersebut tidak ada di semua proyek saya). VS2013
Mr_and_Mrs_D
1
@Mr_and_Mrs_D Anda benar, saya berasumsi bahwa pembaca tahu bagian itu. Diperbarui.
Praetorian
97

Ini adalah cara termudah untuk seorang amatir seperti saya yang belajar C ++ sendiri:

Pertama, Unzip pustaka boost ke direktori pilihan Anda. Saya sarankan c:\directory.

  1. Buka visual C ++ Anda.
  2. Buat proyek baru.
  3. Klik kanan pada proyek tersebut.
  4. Klik properti.
  5. Klik C / C ++.
  6. Klik pada umum.
  7. Pilih perpustakaan termasuk tambahan.
  8. Sertakan tujuan perpustakaan. mis c:\boost_1_57_0.
  9. Klik pada header pre-compiler.
  10. Klik buat / gunakan header yang telah dikompilasi sebelumnya.
  11. Pilih tidak menggunakan header yang telah dikompilasi sebelumnya.

Lalu pergi ke perpustakaan tautan jika Anda mengalami masalah Anda.

  1. Pergi ke tempat file yang diekstrak itu c:\boost_1_57_0.
  2. Klik booststrap.bat(jangan repot-repot mengetik di jendela perintah tunggu saja dan jangan tutup jendela yang merupakan tempat saya mengalami masalah yang membutuhkan waktu dua minggu untuk saya selesaikan. Setelah beberapa saat booststrapakan berjalan dan menghasilkan file yang sama, tetapi sekarang dengan dua nama berbeda:, b2dan bjam.
  3. Klik b2dan tunggu sampai berjalan.
  4. Klik bjamdan tunggu sampai berjalan. Kemudian folder akan dibuat bernama stage.
  5. Klik kanan pada proyek tersebut.
  6. Klik properti.
  7. Klik linker.
  8. Klik pada umum.
  9. Klik sertakan direktori perpustakaan tambahan.
  10. Pilih bagian dari perpustakaan misalnya c:\boost_1_57_0\stage\lib.

Dan Anda siap berangkat!

Wu Jie
sumber
3
Terima kasih banyak Wu Jie - Saya belum pernah melakukan hal seperti ini sebelumnya dan langkah-langkah ini persis seperti yang saya butuhkan untuk membangun Boost dan menghasilkan file pustaka 'libboost_serialization-vc140-mt-gd-1_57.lib' yang hilang. Saya mengalami masalah saat menghubungkan: )
Vixxd
6
Terima kasih, saya suka instruksi detail yang bagus. Untuk langkah 2/3/4 dari pengaturan boost, yang saya lakukan adalah: a) membuka prompt baris perintah sebagai root ; b) ubah ke direktori boost_1_57_0; c) jenis bootstrap.bat(butuh 10-20 detik); d) ketik ./b2sesuai instruksi (butuh 30-40 menit untuk menyelesaikannya).
Darren Cook
1
Saya harus membuka bootstrap.bat menggunakan prompt perintah Visual Studio, karena prompt perintah biasa tidak tahu cara memproses perintah 'cl'.
jlaverde
20/2/2018, solusi Anda berfungsi untuk saya (VS2017 + Boost 1.66). Terima kasih banyak.
CaTx
Terima kasih atas langkah-langkahnya untuk pemula. Saya berharap semua orang akan selalu memberikan jawaban seperti yang Anda berikan.
Mudit Jain
6

Saya memiliki masalah yang sama. Itu disebabkan karena saya menyusun Boost dengan Visual C ++ 2010 (v100) dan saya mencoba menggunakan pustaka dengan Visual Studio 2012 (v110) karena kesalahan.

Jadi, saya mengubah konfigurasi (dalam Visual Studio 2012) ke Properti proyek -> Umum -> Plataform Toolset dan mengubah nilai dari Visual Studio 2012 (v110) menjadi Visual Studio 2010 (v100) .

Jota Santos
sumber
7
Saya harap Anda menyadari bahwa saat Anda mengubah perangkat platform untuk menggunakan v100, Anda memberi tahu VS2012 IDE untuk menggunakan kompiler yang dikirimkan dengan VS2010. Fitur C ++ 11 apa pun yang ditambahkan ke kompiler VS2012 tidak akan tersedia. Solusi yang lebih baik adalah dengan mengkompilasi Boost menggunakan kompiler VS2012; Anda dapat membuat pustaka yang dihasilkan dari 2010 dan 2012 hidup berdampingan karena Boost memasukkan nomor versi compiler ke dalam nama file keluaran.
Praetorian
Anda benar dan saya sadar. Saya takut dengan apa yang mungkin terjadi jika saya meningkatkan pustaka dan kompiler. Jadi, ketika proyek selesai saya akan memperbaiki semua ini. Terima kasih!
Jota Santos
6

Solusi lain:

Saya bingung karena saya menyertakan boost_regex-vc120-mt-gd-1_58.lib di properti Tautan-> Ketergantungan Tambahan, tetapi tautan terus memberi tahu saya bahwa itu tidak dapat membuka libboost_regex-vc120-mt-gd-1_58.lib ( perhatikan awalan lib). Saya tidak menentukan libboost_regex-vc120-mt-gd-1_58.lib.

Saya mencoba menggunakan (dan telah membangun) pustaka dinamis boost (.dlls) tetapi tidak memiliki makro BOOST_ALL_DYN_LINK yang ditentukan. Tampaknya ada petunjuk dalam kompilasi untuk menyertakan pustaka, dan tanpa BOOST_ALL_DYN_LINK, ia mencari pustaka statis (dengan awalan lib), bukan pustaka dinamis (tanpa awalan lib).

wdtj
sumber
Masih hanya 1 suara positif, namun saya mendapati diri saya di sini setiap beberapa bulan, diingatkan lagi apa solusinya untuk masalah saya !!
Neil Gatenby
3

Saya memiliki masalah yang sama dan kesalahan saya adalah saya telah menginstal biner boost_1_55_0-msvc-11.0-32.exe untuk digunakan dengan visual c ++ 2010 yang memiliki versi v100 (properti proyek-> ConfiguratioProperties-> General-> platformTooset) bukan v110 sebagai visual c ++ 2012. Jadi saya mengunduh boost_1_55_0-msvc-10.0-32.exe dan sekarang semuanya baik-baik saja sejauh ini.

Plinio
sumber
2

Jika Anda mengalami masalah dalam membangun peningkatan atau memilih untuk tidak melakukan itu, alternatifnya adalah mengunduh file lib dari SourceForge . Tautan akan membawa Anda ke folder file lib dan dll yang di-zip untuk versi 1.51. Namun, Anda harus dapat mengedit tautan untuk menentukan versi pilihan. Tampaknya penginstal dari BoostPro mengalami beberapa masalah.

Bob Bryan
sumber
2

Saya mengalami masalah serupa saat mencoba menggunakan pengujian unit pendorong di Visual Studio 2015 (Edisi Komunitas):

kesalahan fatal LNK1104: libboost_unit_test_framework-vc140-mt-1_57

jadi saya pikir saya akan membagikan solusi saya.

Anda dapat membuat proyek pengujian unit pendorong dengan dua cara (dan solusi ini berfungsi untuk keduanya):

  1. menggunakan Adaptor Uji Unit Boost
  2. atau dengan membuat Aplikasi Konsol Win32 ( langkah di sini ), dan mengganti fungsi utama dengan fungsi pengujian unit pendorong ( langkah-langkah di sini ).

Berikut adalah langkah-langkah yang saya ikuti untuk membuat kedua proyek berfungsi:

Pertama, unduh versi peningkatan yang diinginkan (misalnya, boost_1_57_0 ). Anda dapat mengunduh boost dengan biner yang benar (dikompilasi menggunakan msvc v140), atau mengekstrak binari sendiri dengan menjalankan perintah berikut dari baris perintah:

  1. bootstrap.bat
  2. "C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" x86
  3. bjam --bersih
  4. bjam -j4 --debug-symbol = on --build-type = complete toolset = msvc-14.0 threading = multi runtime-link = shared address-model = 32

Di mana pnidui-14.0 menentukan bahwa kami memerlukan versi Visual Studio 2015 (VS 2015 = v14.0 = v140), dan address-model = 32 menentukan bahwa kami memerlukan platform 32 (tetapi hal yang sama dapat dilakukan untuk 64 bit).

Setelah Anda memiliki binari, masuk ke Visual Studio, pilih proyek Boost Unit Testing yang telah Anda buat. Buka Properti proyek> konfigurasi (dari menu utama) dan buat pilihan berikut:

  • Setel " General> Platform Toolset " ke Visual Studio 2015 (v140).

  • Sertakan jalur ke folder peningkatan (misalnya C: \ boost_1_57_0) dan jalur ke subfolder yang berisi file biner (misalnya C: \ boost_1_57_0 \ stage \ lib) di:

    • " C \ C ++> Direktori Sertakan Tambahan "
    • dan " Linker> Direktori Perpustakaan Tambahan ".
Aciel
sumber
1

b2 -j% core% toolset =% msvcver% address-model = 64 arsitektur = x86 link = static threading = multi runtime-link = shared --build-type = minimal stage --stagedir = stage / x64

Properti → Linker → Umum → Direktori Perpustakaan Tambahan $ (BOOST) \ stage \ x64 \ lib

Dmitry Ivanov
sumber
Penjelasan lebih lanjut tentang apa yang dilakukan baris tersebut dan mengapa -> akan membantu meningkatkan kualitas jawaban ini.
Anton Menshov
0

Saya memiliki masalah yang sama yang dilaporkan di sini. Saya memecahkan masalah memindahkan mainTest.cpp dari subfolder src / mainTest / ke folder utama src / Saya rasa ini adalah masalah Anda juga.

fiorentinoing
sumber
0

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib

Dalam kasus saya, bootstrap / bjam tidak tersedia (perpustakaan telah dikompilasi sebelumnya dan dikomit ke SCM) pada proyek lama yang diwariskan. Perpustakaan tidak memiliki versi VC atau BOOST dalam nama filenya, misalnya:, libboost_regex-mt-sgd.libbagaimanapunProcessed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib entah bagaimana dipicu secara otomatis.

Diperbaiki dengan menambahkan nama file non-berversi secara manual ke:

<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>

dan daftar hitam yang ...vc120-mt-sgd-1_55.libdi

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
kevinf
sumber