치명적인 오류 LNK1104 : 'libboost_system-vc110-mt-gd-1_51.lib'파일을 열 수 없습니다.


88

이 작업을 할 수없는 것 같습니다. websocket++라이브러리가 필요한 간단한 콘솔 애플리케이션 ( 라이브러리에 의존 )을 만들었습니다 Boost.하지만 컴파일하려고하면 다음과 같은 결과가 나타납니다.

치명적인 오류 LNK1104 : 'libboost_system-vc110-mt-gd-1_51.lib'파일을 열 수 없습니다.

그러나 lib를 만든 bjam (boost_root)/stage/libs을 수행하고 libs 경로를 컴파일러에 연결했습니다 C++/Additionnals includes.

(boost_root)/stage/libs파일을 보면 libboost_system-vc110-mt-gd-1_51.lib거기에 없습니다. libboost_system-vc110-mt-sgd-1_51.lib대신 호출 됩니다.

어떤 생각?


1
bjam으로 전체 빌드를 수행하는 libboost_system-vc110-mt-gd-1_51.lib 파일을 빌드 할 수 있었지만 여전히 오류가 발생합니다.
Rushino

22
을 열고 VS2012 developer command prompt부스트 루트 디렉토리로 이동하여을 입력 bootstrap한 다음을 입력 b2하면 전체 라이브러리 파일 세트가 표시됩니다.
Jesse Good

프로젝트에 포함 경로와 링커 경로를 추가 했습니까?
제시 좋은

1
응용 프로그램을 구축하고 /MD있습니까?
Mahesh

컴파일 대신 다운로드해도 괜찮다면 여기에서 libs를 받으
gorogm 2013

답변:


93

추가 C ++ → 일반 → 디렉토리 포함 컴파일러가 헤더 파일을 검색 할 디렉토리를 나열위한 매개 변수를.

링크 할 라이브러리를 찾을 위치를 링커에 알려야합니다. 이 설정에 액세스하려면 솔루션 탐색기 창 에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭 한 다음 속성 → 링커 → 일반 → 추가 라이브러리 디렉터리를 클릭 합니다. <boost_path>\stage\lib여기에 입력 하십시오 ( 기본 옵션을 사용하여 Boost빌드하는 경우 라이브러리가있는 경로 ).


U는 boost_path 뭔지 설명 할 수
ggsmartboy가

1
@ggsmartboy 부스트 소스 파일이있는 경로입니다 (컴파일러에 나열한 동일한 경로에는 부스트 헤더를 찾을 수 있도록 경로가 포함됩니다). 대답은 기본 빌드 옵션을 사용하여 배포를 사용하지 않고 직접 부스트를 빌드했다고 가정합니다.
Praetorian 2013

대박. 나에게도 진짜 두통을 구했습니다. 왜 내가 부스트 문서에서 이것을 발견 할 수없는 것처럼 보 였는데 (만약 거기에 있다면), 모르겠습니다! :)
absentmindeduk 2014

2
이 답변에 언급 된 설정은 프로젝트 를 마우스 오른쪽 버튼으로 클릭 하고 속성을 선택 하면 찾을 수 있습니다 (나와 같은 멍청한 사람의 경우 솔루션을 마우스 오른쪽 버튼으로 클릭하고 도구> 옵션 등으로 이동합니다. 이러한 옵션은 내 모든 프로젝트에 존재하지 않음). VS2013
Mr_and_Mrs_D

1
@Mr_and_Mrs_D 당신이 맞아요, 독자가 그 부분을 알고 있다고 가정했습니다. 업데이트되었습니다.
Praetorian 2015

97

이것은 혼자서 C ++를 공부하는 저와 같은 아마추어에게 가장 간단한 방법입니다.

먼저 원하는 디렉토리에 부스트 라이브러리의 압축을 풉니 다. 나는 추천한다 c:\directory.

  1. Visual C ++를 엽니 다.
  2. 새 프로젝트를 만듭니다.
  3. 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  4. 속성을 클릭하십시오.
  5. C / C ++를 클릭합니다.
  6. 일반을 클릭하십시오.
  7. 추가 포함 라이브러리를 선택하십시오.
  8. 라이브러리 대상을 포함하십시오. 예 : c:\boost_1_57_0.
  9. 사전 컴파일러 헤더를 클릭하십시오.
  10. 미리 컴파일 된 헤더 생성 / 사용을 클릭합니다.
  11. 미리 컴파일 된 헤더를 사용하지 않도록 선택합니다.

그런 다음 문제가 발생한 경우 링크 라이브러리로 이동하십시오.

  1. 압축을 푼 파일은 c:\boost_1_57_0.
  2. 클릭 booststrap.bat(명령 창에 입력하는 것을 귀찮게하지 말고 2 주가 걸리는 문제를 해결하는 데 걸린 창을 닫지 마십시오. 잠시 후이 booststrap실행되고 동일한 파일이 생성됩니다. 하지만 이제는 b2, 및 bjam.
  3. 를 클릭 b2하고 실행될 때까지 기다리십시오.
  4. 를 클릭 bjam하고 실행될 때까지 기다리십시오. 그러면라는 폴더가 생성 stage됩니다.
  5. 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  6. 속성을 클릭하십시오.
  7. 링커를 클릭하십시오.
  8. 일반을 클릭하십시오.
  9. 추가 라이브러리 디렉토리 포함을 클릭하십시오.
  10. 예를 들어 라이브러리의 일부를 선택합니다 c:\boost_1_57_0\stage\lib.

그리고 당신은 갈 수 있습니다!


3
대단히 감사합니다 Wu Jie-이전에 이와 같은 작업을 한 적이 없었으며이 단계는 정확히 내가 Boost를 빌드하고 연결하는 데 문제가있는 누락 된 'libboost_serialization-vc140-mt-gd-1_57.lib'라이브러리 파일을 생성하는 데 필요한 단계였습니다. )
Vixxd 2015

5
감사합니다. 자세한 설명이 마음에 듭니다. 부스트 설정의 2/3/4 단계에서 대신 수행 한 작업은 다음과 같습니다. a) 루트로 명령 줄 프롬프트 엽니 다 . b) boost_1_57_0 디렉토리로 변경합니다. c) 유형 bootstrap.bat(10-20 초 소요); d) ./b2지시에 따라 입력 합니다 (완료하는 데 30-40 분 소요).
Darren Cook

1
일반 명령 프롬프트가 'cl'명령을 처리하는 방법을 모르기 때문에 Visual Studio 명령 프롬프트를 사용하여 bootstrap.bat 를 열어야했습니다 .
jlaverde

2018 년 2 월 20 일, 귀하의 솔루션이 저에게 적합합니다 (VS2017 + Boost 1.66). 정말 고맙습니다.
CaTx

초보자를위한 단계 감사합니다. 모든 사람이 항상 당신이 주신 것처럼 대답하기를 바랍니다.
Mudit Jain

6

나는 같은 문제가 있었다. Visual C ++ 2010 (v100)으로 Boost를 컴파일하고 실수로 Visual Studio 2012 (v110)에서 라이브러리를 사용하려고했기 때문입니다.

그래서 구성 (Visual Studio 2012에서)을 프로젝트 속성 -> 일반 -> Plataform Toolset 으로 변경하고 값을 Visual Studio 2012 (v110) 에서 Visual Studio 2010 (v100)으로 변경했습니다 .


7
v100을 사용하도록 플랫폼 도구 집합을 변경하면 VS2010과 함께 제공되는 컴파일러를 사용하도록 VS2012 IDE에 지시하는 것입니다. VS2012 컴파일러에 추가 된 C ++ 11 기능은 사용할 수 없습니다. 더 나은 해결책은 VS2012 컴파일러를 사용하여 Boost를 컴파일하는 것입니다. Boost가 출력 파일 이름에 컴파일러 버전 번호를 입력하기 때문에 2010 및 2012에서 생성 된 라이브러리가 공존 할 수 있습니다.
Praetorian 2013 년

당신 말이 맞고 나는 알고 있습니다. 라이브러리와 컴파일러를 업그레이드하면 어떤 일이 일어날 지 두렵습니다. 그래서 프로젝트가 끝나면이 모든 것을 고칠 것입니다. 감사!
Jota Santos 2013 년

6

또 다른 해결책 :

Link-> Additional Dependencies 속성에 boost_regex-vc120-mt-gd-1_58.lib를 포함했기 때문에 당황했지만 링크는 libboost_regex-vc120-mt-gd-1_58.lib ( lib 접두사에 유의하십시오). libboost_regex-vc120-mt-gd-1_58.lib를 지정하지 않았습니다.

부스트 동적 라이브러리 (.dll)를 사용하려고 시도했지만 BOOST_ALL_DYN_LINK 매크로를 정의하지 않았습니다. 분명히 컴파일에는 라이브러리를 포함하는 힌트가 있으며 BOOST_ALL_DYN_LINK가 없으면 동적 라이브러리 (lib 접두사 없음)가 아닌 정적 라이브러리 (lib 접두사 포함)를 찾습니다.


여전히 하나의 찬성 투표이지만 몇 달마다 여기에서 내 문제에 대한 해결책이 무엇인지 다시 상기시켜줍니다!
Neil Gatenby

3

나는 같은 문제가 있었고 실수는 v110이 아닌 버전 v100 (프로젝트 속성-> 구성 속성-> 일반-> 플랫폼 Tooset)이있는 비주얼 C ++ 2010과 함께 사용할 바이너리 boost_1_55_0-msvc-11.0-32.exe를 설치했다는 것입니다. as visual c ++ 2012. 그래서 저는 boost_1_55_0-msvc-10.0-32.exe를 다운로드했고 지금까지 모든 것이 괜찮습니다.


2

부스트 빌드에 문제가 있거나 그렇게하지 않으려는 경우, 대안은 SourceForge 에서 lib 파일을 다운로드하는 것 입니다. 링크를 클릭하면 버전 1.51의 압축 된 lib 및 dll 파일 폴더로 이동합니다. 그러나 링크를 편집하여 선택한 버전을 지정할 수 있어야합니다. 분명히 BoostPro의 설치 프로그램에는 몇 가지 문제가 있습니다.


2

Visual Studio 2015 (Community Edition) 에서 부스트 단위 테스트 를 사용하려고 할 때 비슷한 문제가 발생했습니다 .

치명적인 오류 LNK1104 : libboost_unit_test_framework-vc140-mt-1_57

그래서 내 솔루션을 공유 할 것이라고 생각했습니다.

두 가지 방법으로 부스트 단위 테스트 프로젝트를 만들 수 있습니다 (이 솔루션은 두 가지 모두에 적용됩니다).

  1. 사용하여 부스트 단위 테스트 어댑터
  2. 또는 Win32 콘솔 응용 프로그램을 만들고 ( 여기 단계 ) 주 기능을 부스트 단위 테스트 기능으로 대체합니다 ( 여기 단계 ).

두 프로젝트를 모두 작동시키기 위해 따라야 할 단계는 다음과 같습니다.

먼저 원하는 부스트 버전 (예 : boost_1_57_0 ) 을 다운로드합니다 . 올바른 바이너리 (msvc v140을 사용하여 컴파일 됨)로 boost를 다운로드하거나 명령 줄에서 다음 명령을 실행하여 바이너리를 직접 추출 할 수 있습니다.

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

여기서 msvc-14.0 은 Visual Studio 2015 버전 (VS 2015 = v14.0 = v140)이 필요함을 지정 하고 address-model = 32 는 플랫폼 32가 필요함을 지정합니다 (하지만 64 비트에서도 동일하게 수행 할 수 있음).

바이너리가 있으면 Visual Studio로 이동하여 생성 한 Boost Unit Testing 프로젝트를 선택합니다. 이동 프로젝트 속성> 구성 (메인 메뉴)에서 다음과 같은 선택을 할 :

  • " 일반> 플랫폼 도구 집합 "을 Visual Studio 2015 (v140)로 설정합니다.

  • 부스트 폴더 (예 : C : \ boost_1_57_0)의 경로와 바이너리 파일 (예 : C : \ boost_1_57_0 \ stage \ lib)을 포함하는 하위 폴더의 경로를 다음 위치에 포함합니다.

    • " C \ C ++> 추가 포함 디렉토리 "
    • 및 " 링커> 추가 라이브러리 디렉토리 ".

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

속성 → 링커 → 일반 → 추가 라이브러리 디렉토리 $ (BOOST) \ stage \ x64 \ lib


그 라인이 무엇을하고 왜->이 답변의 품질을 향상시키는 데 도움이 될지에 대해 좀 더 자세히 설명합니다.
Anton Menshov 18:57에

0

여기에 동일한 문제가보고되었습니다. mainTest.cpp를 하위 폴더 src / mainTest /에서 기본 폴더 src /로 이동하는 문제를 해결했습니다. 이것이 당신의 문제라고 생각합니다.


0

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

제 경우에는 이전 상속 된 프로젝트에서 부트 스트랩 / bjam을 사용할 수 없었습니다 (라이브러리가 사전 컴파일되고 SCM에 커밋 됨). 라이브러리에는 파일 이름에 VC 또는 BOOST 버전 관리가 없었 libboost_regex-mt-sgd.lib습니다 ( 예 :). 그러나 Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib어떻게 든 자동으로 트리거되었습니다.

버전이 지정되지 않은 파일 이름을 다음에 수동으로 추가하여 수정되었습니다.

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

및 블랙리스트 ...vc120-mt-sgd-1_55.lib

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.