önemli hata LNK1104: 'libboost_system-vc110-mt-gd-1_51.lib' dosyası açılamıyor


89

Görünüşe göre bunu çalıştıramıyorum websocket++Kitaplıklara ihtiyaç duyan ( kitaplığa bağlı ) basit bir konsol uygulaması yaptım Boost.. ama derlemeye çalıştığımda şunu elde ediyorum:

önemli hata LNK1104: 'libboost_system-vc110-mt-gd-1_51.lib' dosyası açılamıyor

Bununla birlikte, lib'i oluşturan bjam'i yaptım ve lib'lerin (boost_root)/stage/libsyolunu derleyiciye bağladım C++/Additionnals includes.

Ben de bakarsak (boost_root)/stage/libsdosyada libboost_system-vc110-mt-gd-1_51.libyoktur. Onun libboost_system-vc110-mt-sgd-1_51.libyerine denir .

Herhangi bir fikir?


1
Bjam ile tam bir derleme yaparak libboost_system-vc110-mt-gd-1_51.lib dosyasını oluşturabildim, ancak yine de hatayı alıyorum.
Rushino

22
Açın, VS2012 developer command promptboost kök dizininize gidin ve yazın bootstrapve ardından yazın b2ve eksiksiz bir kitaplık dosyası seti almalısınız.
Jesse Good

Dahil etme yollarını ve bağlayıcı yollarını projenize eklediniz mi?
Jesse Good

1
Uygulamanızı ile /MDmi oluşturuyorsunuz ?
Mahesh

Derlemek yerine indirmenin bir sakıncası yoksa
edinin

Yanıtlar:


93

Ek C ++ → Genel → Dizinler dahil derleyici başlık dosyaları arayacaktır dizinleri listeleme içindir parametresi.

Bağlayıcıya bağlanacak kitaplıkları nerede arayacağını söylemeniz gerekir. Bu ayara erişmek için, Çözüm Gezgini penceresinde proje adına sağ tıklayın , ardından Özellikler → Bağlayıcı → Genel → Ek Kitaplık Dizinleri . <boost_path>\stage\libBuraya girin (bu, Boost'u oluşturuyorsanız kitaplıkların bulunduğu yoldur. varsayılan seçenekleri kullanarak oluşturuyorsanız ).


boost_path'in ne olduğunu açıklayabilir misin
ggsmartboy

1
@ggsmartboy Bu, destek kaynak dosyalarının bulunduğu yoldur (derleyicide listelediğiniz yolun, yükseltme başlıklarını bulabilmesi için yolları içerir). Cevap, varsayılan derleme seçeneklerini kullanarak kendiniz destek oluşturduğunuzu (bir dağıtım kullanmadığınızı) varsayar.
Praetorian

Harika. Beni de gerçek bir baş ağrısından kurtardı. Bunu destek belgelerinde neden göremedim (eğer orada olsa bile), bilmiyorum! :)
absentmindeduk

2
Bu cevapta belirtilen ayarlar, projeye sağ tıklarsanız ve özellikleri seçerseniz bulunur (benim gibi noob'lar için çözüme sağ tıklama, Araçlar> Seçenekler'e gitme vb. Yine de bu seçenekler tüm projelerimde mevcut değildi). VS2013
Mr_and_Mrs_D

1
@Mr_and_Mrs_D Haklısınız, okuyucunun bu kısmı bildiğini varsaydım. Güncellenmiş.
Praetorian

97

Kendi başına C ++ okuyan benim gibi bir amatör için en basit yol budur:

Öncelikle, destek kitaplığını seçtiğiniz herhangi bir dizine açın. Tavsiye ederim c:\directory.

  1. Görsel C ++ 'nızı açın.
  2. Yeni bir proje oluşturun.
  3. Projeye sağ tıklayın.
  4. Mülke tıklayın.
  5. C / C ++ 'a tıklayın.
  6. Genel tıklayın.
  7. Ek içerme kitaplığını seçin.
  8. Kitaplık hedefini ekleyin. ör c:\boost_1_57_0.
  9. Ön derleyici başlığına tıklayın.
  10. Önceden derlenmiş başlık oluştur / kullan üzerine tıklayın.
  11. Önceden derlenmiş başlığı kullanmamayı seçin.

Ardından, sorunlarınız yaşadıysanız bağlantı kitaplığına gidin.

  1. Çıkarılan dosyanın bulunduğu yere gidin c:\boost_1_57_0.
  2. Tıklayın booststrap.bat(komut penceresine yazma zahmetine girmeyin sadece bekleyin ve çözmem iki hafta süren sorunumun bulunduğu pencereyi kapatmayın. Bir süre sonra booststrapçalışacak ve aynı dosyayı üretecek, ama şimdi iki farklı adla: b2ve bjam.
  3. Tıklayın b2ve çalışmasını bekleyin.
  4. Tıklayın bjamve çalışmasını bekleyin. Daha sonra adlı bir klasör üretilecektir stage.
  5. Projeye sağ tıklayın.
  6. Mülke tıklayın.
  7. Bağlayıcıya tıklayın.
  8. Genel tıklayın.
  9. Ek kitaplık dizini dahil et seçeneğine tıklayın.
  10. Örneğin kitaplığın bir bölümünü seçin c:\boost_1_57_0\stage\lib.

Ve gitmekte iyisin!


3
Çok teşekkürler Wu Jie - Daha önce hiç böyle bir şey yapmamıştım ve bu adımlar, Boost'u oluşturmak ve eksik 'libboost_serialization-vc140-mt-gd-1_57.lib' kitaplık dosyasını oluşturmak için tam da ihtiyacım olan şeydi Bağlama konusunda sorun yaşıyordum: )
Vixxd

6
Teşekkürler, güzel ayrıntılı talimatları severim. Güçlendirme kurulumunun 2/3/4. Adımı için, bunun yerine yaptığım şey şuydu: a) root olarak bir komut satırı istemi açmak ; b) boost_1_57_0 dizinine geçmek; c) yazın bootstrap.bat(10-20 saniye sürdü); d) belirtildiği gibi yazın ./b2(tamamlanması 30-40 dakika sürdü).
Darren Cook

1
Normal komut istemi 'cl' komutunun nasıl işleneceğini bilmediğinden, bootstrap.bat dosyasını Visual Studio komut istemini kullanarak açmak zorunda kaldım .
jlaverde

20.02.2018, çözümünüz benim için çalışıyor (VS2017 + Boost 1.66). Çok teşekkür ederim.
CaTx

Yeni başlayanlar için adımlar için teşekkür ederiz. Herkesin her zaman sizin verdiğiniz cevapları vermesini diliyorum.
Mudit Jain

6

Ben de aynı sorunu yaşadım. Bunun nedeni Boost'u Visual C ++ 2010 (v100) ile derlemem ve yanlışlıkla kütüphaneyi Visual Studio 2012 (v110) ile kullanmaya çalışmış olmamdı.

Bu yüzden, Proje özellikleri -> Genel -> Plataform Araç Seti'ne giden yapılandırmaları (Visual Studio 2012'de) değiştirdim ve değeri Visual Studio 2012'den (v110) Visual Studio 2010'a ( v100) değiştirdim .


7
Umarım platform araç setini v100'ü kullanacak şekilde değiştirdiğinizde, VS2012 IDE'ye VS2010 ile birlikte gelen derleyiciyi kullanmasını söylediğinizi fark etmişsinizdir. VS2012 derleyicisine eklenen hiçbir C ++ 11 özelliği kullanılamayacaktır. Daha iyi bir çözüm, VS2012 derleyicisini kullanarak Boost'u derlemektir; Boost, derleyici sürüm numarasını çıktı dosya adlarına koyduğundan, hem 2010 hem de 2012'den üretilen kitaplıklara sahip olabilirsiniz.
Praetorian

Haklısın ve farkındayım. Kitaplıkları ve derleyiciyi yükseltirsem ne olabileceğinden korkuyorum. Yani proje bittiğinde tüm bunları düzeltirim. Teşekkürler!
Jota Santos

6

Yine başka bir çözüm:

Bağlantı-> Ek Bağımlılıklar özelliğime boost_regex-vc120-mt-gd-1_58.lib dahil ettiğim için şaşırdım, ancak bağlantı bana libboost_regex-vc120-mt-gd-1_58.lib ( kitaplık önekini not edin). Libboost_regex-vc120-mt-gd-1_58.lib'i belirtmedim.

Yükseltme dinamik kitaplıklarını (.dlls) kullanmaya çalışıyordum (ve inşa etmiştim), ancak BOOST_ALL_DYN_LINK makrosunu tanımlamadım. Görünüşe göre derlemede bir kitaplık eklemek için ipuçları var ve BOOST_ALL_DYN_LINK olmadan, dinamik kitaplığı değil (lib öneki olmadan) statik kitaplığı (lib önekiyle) arar.


Hala sadece 1 olumlu oy, yine de kendimi birkaç ayda bir burada buluyorum, sorunumun çözümünün ne olduğu bir kez daha hatırlatılıyor !!
Neil Gatenby

3

Aynı sorunu yaşadım ve hatam, v100 (proje özellikleri-> ConfiguratioProperties-> General-> platformTooset) değil v110 sürümüne sahip visual c ++ 2010 ile kullanmak için ikili boost_1_55_0-msvc-11.0-32.exe'yi kurmuş olmamdı. görsel c ++ 2012 olarak. Böylece boost_1_55_0-msvc-10.0-32.exe dosyasını indirdim ve şimdiye kadar her şey yolunda.


2

Yükseltme oluşturmada sorun yaşıyorsanız veya bunu yapmamayı tercih ediyorsanız, bir alternatif kitaplık dosyalarını SourceForge'dan indirmektir . Bağlantı sizi 1.51 sürümü için sıkıştırılmış kitaplık ve dll dosyalarının bulunduğu bir klasöre götürecektir. Ancak, tercih ettiğiniz sürümü belirtmek için bağlantıyı düzenleyebilmelisiniz. Görünüşe göre BoostPro'nun yükleyicisinin bazı sorunları var.


2

Kullanım çalışırken ben de benzer bir sorun vardı test boost ünitesinde içinde Visual Studio 2015 (Community Edition):

önemli hata LNK1104: libboost_unit_test_framework-vc140-mt-1_57

bu yüzden çözümümü paylaşacağımı düşündüm.

İki yoldan bir destek birimi testi projesi oluşturabilirsiniz (ve bu çözüm her ikisi için de işe yarar):

  1. kullanarak Boost Birim Test Adaptörü
  2. veya bir Win32 Konsol Uygulaması oluşturarak ( buradaki adımlar ) ve ana işlevi bir destek birimi test işlevi ile değiştirerek ( buradaki adımlar ).

Her iki projenin de çalışmasını sağlamak için izlediğim adımlar:

İlk önce, istenen yükseltme sürümünü indirin (örneğin, boost_1_57_0 ). Hızlandırmayı doğru ikili dosyalar ile indirebilir (msvc v140 kullanılarak derlenir) veya aşağıdaki komutları komut satırından çalıştırarak ikili dosyaları kendiniz çıkarabilirsiniz:

  1. bootstrap.bat
  2. "C: \ Program Dosyaları (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" x86
  3. bjam - temiz
  4. bjam -j4 --debug-symbols = on --build-type = complete toolset = msvc-14.0 threading = multi runtime-link = paylaşılan adres-model = 32

Nerede msvc-14.0 biz Visual Studio 2015 sürümü gerektirdiğini belirtir (VS 2015 = v14.0 = V140) ve adres model = 32 platformu nasıl 32 gerektirir (ancak aynı 64 bit için yapılabilir) olduğunu belirtir.

İkili dosyalara sahip olduğunuzda, Visual Studio'ya gidin, oluşturduğunuz Boost Unit Testing projesini seçin. Git Proje özelliklerine> yapılandırma (ana menüden) ve aşağıdaki seçimler yapmak:

  • " Genel> Platform Araç Seti " ni Visual Studio 2015 (v140) olarak ayarlayın.

  • Yükseltme klasörünün yolunu (örneğin C: \ boost_1_57_0) ve ikili dosyaları içeren alt klasör yolunu (örneğin C: \ boost_1_57_0 \ stage \ lib) ekleyin:

    • " C \ C ++> Ek İçerme Dizini "
    • ve " Bağlayıcı> Ek Kitaplık Dizinleri ".

1

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

Özellikler → Bağlayıcı → Genel → Ek Kitaplık Dizinleri $ (BOOST) \ stage \ x64 \ lib


Bu satırların ne yaptığına ve neden yaptığına dair biraz daha fazla ayrıntı -> bu yanıtın kalitesini artırmaya yardımcı olabilir.
Anton Menshov

0

Aynı sorunu burada bildirdim. MainTest.cpp dosyasını bir alt klasör src / mainTest / 'den ana klasör src'ye taşıma sorununu çözdüm / sanırım bu da senin problemindi.


0

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

Benim durumumda, eski devralınan projede bootstrap / bjam mevcut değildi (kütüphaneler önceden derlenmiş ve SCM'ye işlenmiştir). Kitaplıkların dosya adlarında VC veya BOOST sürümlemesi yoktu libboost_regex-mt-sgd.lib, örneğin: ancakProcessed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib şekilde otomatik olarak tetiklendi.

Sürümü olmayan dosya adının manuel olarak eklenmesiyle düzeltildi:

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

ve ...vc120-mt-sgd-1_55.libgirişi kara listeye alma

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.