2012-09-30 3 views
1
내가 Jamfile에서 부스트 라이브러리에 연결하려고

:Boost.Build 링크

: 나는 라이브러리가 컴파일되는 콘솔 출력에서 ​​볼 수 있지만

import os ; 
path-constant BOOST_ROOT : [ os.environ BOOST_ROOT ] ; 
use-project /boost : $(BOOST_ROOT) ; 

exe hello : 
      hello.cpp 
      /boost//filesystem 
      /boost//system 
      : 
      <link>static 
      ; 

링커 오류를 출력

msvc.link bin\msvc-10.0\debug\link-static\hello.exe 
LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc100-mt-gd-1_46.lib' 

왜 오류가보고 되었습니까? I AM Jamfile 수준에서 라이브러리에 연결되므로 라이브러리가 있어야 할 때 라이브러리가 연결되지 않는 이유는 무엇입니까? Jamfiles가 전체 빌드 프로세스를 제어한다면 라이브러리는 자동으로 정적으로 링크되어야하며 Jamfiles의 이식성이 떨어지게되므로 컴파일러 관련 플래그를 추가하지 않아야합니다. 도와주세요.

+1

부스트의 자동 링크 기능에 문제가있는 것 같습니다. 당신은'BOOST_ALL_NO_LIB'를 정의함으로써 이것을 불가능하게 할 수 있습니다 (타겟'hello'의 요구 사항에' BOOST_ALL_NO_LIB'를 추가하면 충분할 것입니다). –

+0

와우. 작동하는 것 같습니다! 그러나 어떻게? 내 자신의 라이브러리 타겟을 정의한다면 : lib foo : foo.cpp; 그리고 나는 그걸 부스트하는 것과 비슷하게 작동합니다. 그러면 Jamfiles를 통해 링크 할 때 왜 부스트 라이브러리로 작동하지 않습니까? –

+0

또한 제발,이 대답을 넣어 답변 및 닫습니다 스레드로 표시 할 수 있습니다. 감사. –

답변

2

부스트의 자동 링크 기능에 문제가있는 것 같습니다. BOOST_ALL_NO_LIB을 정의하여이 기능을 비활성화 할 수 있습니다 (대상 hello의 요구 사항에 <define>BOOST_ALL_NO_LIB을 추가하는 것으로 충분합니다).

+0

하지만 대상 "lib foo : foo.cpp;"로 표시된 사용자 정의 라이브러리와 함께 작동하는 이유를 알고 있습니까? 부스트와 작동하지 않습니까? –

+1

@MarcAndreson 문제는 부스트 라이브러리에만 해당됩니다. 헤더 파일에는 컴파일러 옵션을 감지하고 해당 정보를 사용하여 프로그램과 링크되어야하는 라이브러리를 자동으로 추측하여 "수동으로"추가하는 모든 라이브러리를 무시하는 특수 코드가 있습니다. 이 프로세스는 때로는 (빈번히 (Visual Studio를 사용하지 않습니다.)) 실패하고, 연결하지 않으면 연결이 어려워집니다. 동일한 문제가있는 [this one] (http://stackoverflow.com/questions/11384521/error-when-compiling-with-boost/)과 같은 몇 가지 질문이 있습니다. –