błąd krytyczny LNK1104: nie można otworzyć pliku „libboost_system-vc110-mt-gd-1_51.lib”

88

Wygląda na to, że nie mogę tego uruchomić. Zrobiłem prostą aplikację konsolową (zależną od websocket++biblioteki), która potrzebuje Boostbibliotek ... ale kiedy próbuję skompilować, otrzymuję:

błąd krytyczny LNK1104: nie można otworzyć pliku „libboost_system-vc110-mt-gd-1_51.lib”

Jednak zrobiłem bjam, który utworzył bibliotekę w (boost_root)/stage/libsi połączyłem ścieżkę do bibliotek z kompilatorem C++/Additionnals includes.

Jeśli zajrzę (boost_root)/stage/libsdo akt, libboost_system-vc110-mt-gd-1_51.libnie ma. Nazywa się libboost_system-vc110-mt-sgd-1_51.libzamiast tego.

Dowolny pomysł?

Rushino
źródło
1
Udało mi się zbudować plik libboost_system-vc110-mt-gd-1_51.lib, wykonując pełną kompilację za pomocą bjam, ale nadal otrzymuję błąd.
Rushino,
22
Otwórz VS2012 developer command prompt, przejdź do katalogu głównego boost i wpisz bootstrap, a następnie wpisz, b2a powinieneś otrzymać pełny zestaw plików bibliotecznych.
Jesse Good
Czy dodałeś do projektu ścieżki dołączania i ścieżki linkera?
Jesse Good
1
Czy tworzysz swoją aplikację za pomocą /MD?
Mahesh
Jeśli można pobrać zamiast kompilować, pobierz biblioteki stąd: code.ingres.com/boostlib/trunk/stage/lib
gorogm

Odpowiedzi:

93

Parametr C ++ → General → Additional Include Directories służy do wyświetlania listy katalogów, w których kompilator będzie szukał plików nagłówkowych.

Musisz powiedzieć konsolidatorowi, gdzie ma szukać bibliotek, do których ma linkować. Aby uzyskać dostęp do tego ustawienia, kliknij prawym przyciskiem myszy nazwę projektu w oknie Eksplorator rozwiązań , a następnie Właściwości → Konsolidator → Ogólne → Dodatkowe katalogi biblioteczne . Wpisz <boost_path>\stage\libtutaj (jest to ścieżka, w której znajdują się biblioteki, jeśli budujesz Boost przy użyciu domyślnych opcji).

Pretorianin
źródło
Czy możesz mi wyjaśnić, co to jest ścieżka_doładowania
ggsmartboy,
1
@ggsmartboy To ścieżka, w której znajdują się pliki źródłowe boost (ta sama ścieżka, którą podajesz w kompilatorze, zawiera ścieżki, dzięki czemu można znaleźć nagłówki boost). Odpowiedź zakłada, że ​​sam zbudowałeś boost (nie używając dystrybucji), używając domyślnych opcji kompilacji.
Praetorian
Niesamowite. Uratował mi też prawdziwy ból głowy. Dlaczego wydawało mi się, że nie mogę tego zauważyć w dokumentacji doładowania (jeśli w ogóle tam jest), nie wiem! :)
absentmindeduk
2
Ustawienia, o których mowa w tej odpowiedzi, można znaleźć, klikając prawym przyciskiem myszy projekt i wybierając właściwości (w przypadku noobów takich jak ja kliknięcie prawym przyciskiem myszy na rozwiązanie, przechodząc do Narzędzia> Opcje itp. Te opcje nie były jednak obecne we wszystkich moich projektach). VS2013
Mr_and_Mrs_D
1
@Mr_and_Mrs_D Masz rację, założyłem, że czytelnik znał tę część. Zaktualizowano.
Praetorian
97

To najprostszy sposób dla amatora takiego jak ja, który samodzielnie uczy się C ++:

Najpierw rozpakuj bibliotekę boost do dowolnego wybranego katalogu. Polecam c:\directory.

  1. Otwórz swój wizualny C ++.
  2. Utwórz nowy projekt.
  3. Kliknij projekt prawym przyciskiem myszy.
  4. Kliknij właściwość.
  5. Kliknij C / C ++.
  6. Kliknij ogólne.
  7. Wybierz dodatkową bibliotekę dołączania.
  8. Uwzględnij miejsce docelowe biblioteki. np c:\boost_1_57_0.
  9. Kliknij nagłówek prekompilatora.
  10. Kliknij utwórz / użyj wstępnie skompilowanego nagłówka.
  11. Wybierz, aby nie używać wstępnie skompilowanego nagłówka.

Następnie przejdź do biblioteki linków, w której wystąpiły problemy.

  1. Przejdź do miejsca, w którym był wyodrębniony plik c:\boost_1_57_0.
  2. Kliknij booststrap.bat(nie zawracaj sobie głowy wpisywaniem w oknie poleceń, po prostu poczekaj i nie zamykaj okna, czyli miejsca, w którym miałem problem, którego rozwiązanie zajęło mi dwa tygodnie. Po chwili booststrapuruchomi się i utworzy ten sam plik, ale teraz z dwiema różnymi nazwami: b2i bjam.
  3. Kliknij b2i poczekaj na uruchomienie.
  4. Kliknij bjami poczekaj na uruchomienie. Następnie zostanie utworzony folder o nazwie stage.
  5. Kliknij projekt prawym przyciskiem myszy.
  6. Kliknij właściwość.
  7. Kliknij linker.
  8. Kliknij ogólne.
  9. Kliknij dołącz dodatkowy katalog biblioteki.
  10. Wybierz część biblioteki np c:\boost_1_57_0\stage\lib.

I jesteś gotowy!

Wu Jie
źródło
3
Bardzo dziękuję Wu Jie - nigdy wcześniej nie robiłem czegoś takiego, a te kroki były dokładnie tym, czego potrzebowałem, aby zbudować Boost i utworzyć brakujący plik biblioteki „libboost_serialization-vc140-mt-gd-1_57.lib”. Miałem problem z połączeniem: )
Vixxd
5
Dzięki, lubię ładne szczegółowe instrukcje. W kroku 2/3/4 ustawiania boost, zamiast tego zrobiłem: a) otwórz wiersz poleceń jako root ; b) przejdź do katalogu boost_1_57_0; c) typ bootstrap.bat(zajęło to 10-20 sekund); d) wpisz ./b2zgodnie z instrukcją (wypełnienie zajęło 30-40 minut).
Darren Cook,
1
Musiałem otworzyć plik bootstrap.bat za pomocą wiersza polecenia programu Visual Studio, ponieważ zwykły wiersz polecenia nie wiedział, jak przetworzyć polecenie „cl”.
jlaverde
20.02.2018, Twoje rozwiązanie działa dla mnie (VS2017 + Boost 1.66). Dziękuję bardzo.
CaTx
Dziękuję za kroki dla początkujących. Chciałabym, żeby wszyscy zawsze dawali odpowiedzi takie, jak ty.
Mudit Jain
6

Miałem ten sam problem. Jest to spowodowane tym, że skompilowałem Boost w Visual C ++ 2010 (v100) i przez pomyłkę próbowałem użyć tej biblioteki z Visual Studio 2012 (v110).

Więc zmieniłem konfiguracje (w Visual Studio 2012) przechodząc do Właściwości projektu -> Ogólne -> Zestaw narzędzi Plataform i zmieniłem wartość z Visual Studio 2012 (v110) na Visual Studio 2010 (v100) .

Jota Santos
źródło
7
Mam nadzieję, że zdajesz sobie sprawę, że kiedy zmieniasz zestaw narzędzi platformy na v100, mówisz IDE VS2012, aby używał kompilatora dostarczonego z VS2010. Żadne funkcje C ++ 11, które zostały dodane do kompilatora VS2012, nie będą dostępne. Lepszym rozwiązaniem jest skompilowanie Boost za pomocą kompilatora VS2012; możesz mieć wygenerowane biblioteki z 2010 i 2012 roku, ponieważ Boost umieszcza numer wersji kompilatora w wyjściowych nazwach plików.
Praetorian
Masz rację i jestem tego świadomy. Boję się, co się stanie, jeśli zaktualizuję biblioteki i kompilator. Więc kiedy projekt zostanie ukończony, naprawię to wszystko. Dzięki!
Jota Santos
6

Jeszcze inne rozwiązanie:

Zaskoczyło mnie to, ponieważ włączyłem boost_regex-vc120-mt-gd-1_58.lib do mojej właściwości Link-> Additional Dependencies, ale link ciągle mówił mi, że nie może otworzyć libboost_regex-vc120-mt-gd-1_58.lib ( zwróć uwagę na przedrostek lib). Nie podałem libboost_regex-vc120-mt-gd-1_58.lib.

Próbowałem użyć (i zbudowałem) dynamiczne biblioteki boost (.dlls), ale nie miałem zdefiniowanego makra BOOST_ALL_DYN_LINK. Najwyraźniej w kompilacji znajdują się wskazówki dotyczące włączenia biblioteki, a bez BOOST_ALL_DYN_LINK szuka biblioteki statycznej (z prefiksem lib), a nie biblioteki dynamicznej (bez prefiksu lib).

wdtj
źródło
Wciąż tylko 1 głos za, ale co kilka miesięcy znajduję się tutaj, ponownie przypominając sobie, jakie jest rozwiązanie mojego problemu!
Neil Gatenby
3

Miałem ten sam problem i moim błędem było to, że zainstalowałem binarny boost_1_55_0-msvc-11.0-32.exe do użycia z Visual C ++ 2010, który ma wersję v100 (właściwości projektu-> ConfiguratioProperties-> General-> platformTooset) a nie v110 jako wizualne c ++ 2012. Więc pobrałem boost_1_55_0-msvc-10.0-32.exe i na razie wszystko jest w porządku.

Plinio
źródło
2

Jeśli masz problemy z budowaniem przyspieszenia lub wolisz tego nie robić, alternatywą jest pobranie plików lib z SourceForge . Odsyłacz przeniesie Cię do folderu ze spakowanymi plikami lib i dll dla wersji 1.51. Powinieneś jednak móc edytować łącze, aby określić wybraną wersję. Najwyraźniej instalator BoostPro ma pewne problemy.

Bob Bryan
źródło
2

Miałem podobny problem podczas próby użycia testów jednostkowych przyspieszenia w programie Visual Studio 2015 (Community Edition):

błąd krytyczny LNK1104: libboost_unit_test_framework-vc140-mt-1_57

więc pomyślałem, że podzielę się moim rozwiązaniem.

Projekt przyspieszenia testów jednostkowych można utworzyć na dwa sposoby (i to rozwiązanie działa w obu przypadkach):

  1. za pomocą adaptera do testowania jednostki przyspieszającej
  2. lub tworząc aplikację konsoli Win32 ( kroki tutaj ) i zastępując funkcję główną funkcją testowania jednostkowego przyspieszenia ( kroki tutaj ).

Oto kroki, które wykonałem, aby oba projekty działały:

Najpierw pobierz żądaną wersję doładowania (na przykład boost_1_57_0 ). Możesz pobrać boost z poprawnymi plikami binarnymi (skompilowanymi za pomocą msvc v140) lub samodzielnie rozpakować pliki binarne, uruchamiając następujące polecenia z wiersza poleceń:

  1. bootstrap.bat
  2. „C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat” x86
  3. bjam - czyste
  4. bjam -j4 --debug-symbols = on --build-type = kompletny zestaw narzędzi = msvc-14.0 threading = multi runtime-link = współdzielony model adresu = 32

Gdzie msvc-14.0 określa, że ​​wymagamy wersji Visual Studio 2015 (VS 2015 = v14.0 = v140), a address-model = 32 określa, że ​​wymagamy platformy 32 (ale to samo można zrobić dla wersji 64-bitowej).

Gdy masz już pliki binarne, przejdź do programu Visual Studio, wybierz utworzony projekt Boost Unit Testing. Przejdź do Właściwości projektu> konfiguracja (z menu głównego) i dokonaj następujących wyborów:

  • Ustaw „ Ogólne> Zestaw narzędzi platformy ” na Visual Studio 2015 (v140).

  • Dołącz ścieżkę do folderu boost (np. C: \ boost_1_57_0) i ścieżkę do podfolderu zawierającego pliki binarne (np. C: \ boost_1_57_0 \ stage \ lib) w:

    • C \ C ++> Dodatkowy katalog dołączania
    • oraz „ Linker> Additional Library Directories ”.
Aciel
źródło
1

b2 -j% rdzeni% zestaw narzędzi =% msvcver% model-adresu = 64 architektura = łącze x86 = wątki statyczne = wiele łączy uruchomieniowych = współdzielone --build-type = minimalny etap --stagedir = stage / x64

Właściwości → Konsolidator → Ogólne → Dodatkowe katalogi biblioteczne $ (BOOST) \ stage \ x64 \ lib

Dmitrij Iwanow
źródło
Nieco więcej szczegółów na temat tego, co robią te wersety i dlaczego -> pomogłoby poprawić jakość tej odpowiedzi.
Anton Menshov
0

Zgłoszono mi ten sam problem. Rozwiązałem problem przenosząc plik mainTest.cpp z podfolderu src / mainTest / do głównego folderu src / Myślę, że to też był twój problem.

fiorentinoing
źródło
0

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

W moim przypadku bootstrap / bjam nie był dostępny (biblioteki były prekompilowane i zatwierdzane do SCM) w starym odziedziczonym projekcie. Biblioteki nie miały wersji VC ani BOOST w swoich nazwach plików, np .: libboost_regex-mt-sgd.lib, jednak Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.libzostało w jakiś sposób uruchomione automatycznie.

Naprawiono przez ręczne dodanie niewersjonowanej nazwy pliku do:

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

i czarnych list z ...vc120-mt-sgd-1_55.libin

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
kevinf
źródło