2009-02-26 5 views
4

이 고급 기능은 나보다 고급 사용자에게는 간단한 문제입니다. :-) Windows에서 Cygwin으로 부스트 라이브러리를 어떻게 사용합니까?Windows에서 Cygwin과 함께 부스트 사용

winxp 컴퓨터에서 cygwin을 사용하여 g ++로 프로그래밍 중입니다. 2 차 수정 된 베셀 함수가 필요하므로 최신 버전의 부스트 라이브러리를 다운로드하여 'c : \ cygwin \ lib \ boost_ 1_ 38_0 \'폴더에 설치하십시오.

나는 그들의 웹 사이트의 "시작"섹션에서 "example.cpp"프로그램을 실행하려고 : http://www.boost.org/doc/libs/1_35_0/more/getting_started/unix-variants.html

나는 간단한 bash 쉘을 사용하여 내가 예제 파일을 만든 디렉토리에서 컴파일하고 명령 줄 : 'g ++ -Wall example.cpp'

라는 메시지가 계속

: "부스트/람다/lambda.hpp : 해당 파일 또는 디렉토리가 없음"

내가 -L의 가능한 모든 조합을 시도, 명령 행에서 디렉토리를 포함하는 -l 옵션, -I 옵션 아무 소용이. 또한 내 Windows 시스템의 PATH 줄에 폴더를 추가하려고했습니다.

/boost 디렉토리와 ALSO를 모든 하위 디렉토리에 연결하려면 어떻게해야합니까? 헤더 파일 'lambda.hpp'는 하위 디렉토리의 다른 헤더 파일을 호출합니다.

+0

프로그램을 포함 잊으 다음과 같이 실험으로

, 나는 컴파일하고 부스트 그래프 샘플 프로그램을 실행 관리 #INCLUDE 사용법 #include INT 주() { 네임 스페이스 부스트를 사용하여 : : 람다; typedef std :: istream_iterator in; std :: for_each ( in (std :: cin), in(), std :: cout << (_1 * 3) << ""); } –

+0

시작 안내서의 최신 버전에 대한 링크는 다음과 같습니다. http://www.boost.org/doc/libs/release/more/getting_started/unix-variants.html 1.35에 링크했습니다. –

답변

9

아마도 C++에 익숙하지 않은 것입니까? 당신이 혼란스러운 용어 인 것 같습니다.

C++ 프로그램은 컴파일 및 링크의 두 단계로 작성됩니다. 첫 번째 단계에서 각 소스 파일 (일반적으로 .cpp라고 함)은 개별적으로 처리됩니다. 각 .cpp 파일은 일반적으로 여러 헤더를 사용하므로 컴파일러는 처음에는 문자 그대로 삽입합니다. 그것이 #include라고 불리는 이유입니다.

두 번째 단계에서 링커는 컴파일 된 모든 .cpp 파일을 함께 가져 와서 최종 프로그램을 빌드합니다. 컴파일 된 .cpp 파일 중 일부는 전에 번들로 묶어 놓았을 수도 있습니다. 번들은 라이브러리라고합니다.

부스트는 헤더와 .cpp 파일의 모음입니다. 따라서 컴파일러와 링커 모두 Boost 디렉토리를 찾아야 할 수도 있습니다. 오류 메시지에서 컴파일러 단계가 문제라는 것이 확실합니다. 링커는 헤더가 더 이상 필요하지 않습니다.

컴파일러는 #include <boost/lambda/lambda.hpp> instuction을 볼 수 있습니다. 즉, 첫 번째 레벨 boost 디렉토리가 어디에 있는지를 알아야합니다. 나는 경로가 /lib/boost_ 1_ 38_0/include 것이이 시점에서 추측 것 (항상 년대 find/-name lambda.hpp 산탄 총 appraoch)

당신이 완전히 Cygwin에서에 집착하지 않는 경우
+3

+1 평범한 사람을위한 작은 단어로 기본 개념을 설명하는 드문 인내심 - 감사합니다. – Ben

+1

@Ben 기본 개념과 전문가 개념의 문제 : 모든 사람이 기본 개념을 설명 할 수 있지만 아무도 않습니다 ... 전문가 개념 : 모두가 설명하려고하지만 아무도 할 수 없습니다. :) – bordeo

+0

@bordeo - 머리에 맞았습니다! 천재 : 나는 그것을 훔칠지도 모른다. 그것에 덧붙여, 아무도 간단한 개념을 설명함으로써 바보처럼 보이기를 원합니다! – Ben

3

, 당신은 모든 당신에게 완전한는 MinGW C++ 설치를 제공 http://nuwen.net/mingw.html 살펴 보셔야합니다 라이브러리 (예 : Boost)가 설정됩니다.

편집 : Cygwin 이외에이 MinGW 설치를 사용할 수 있음을 분명히해야합니다. Cygwin보다 먼저 PNG에 MinGW bin 디렉토리가 있는지 확인하십시오.

2

당신이 생각 하기엔 -I /lib/boost_1_38_0가 필요하다고 생각합니다.하지만 꽤 특별한 장소입니다. 어떻게 설치했는지 알려야하고, 말한 위치에 압축을 풀었습니까? 아니면 makefile을 실행 했습니까? 나는 당신이 cygwin에 그것을 설치하지 않은 윈도우 경로를 주었다고 가정합니다. 아마도 그렇게해야 할 것입니다.유닉스에 대한 시작 안내서의 지침은 도움이 될 것입니다. 미리 작성된 bjam을 다운로드하지는 않지만 cygwin을 사용하여 빌드해야합니다.

cygwin (또는 유닉스 전반)에 익숙하지 않다면 Neil Butterworth's answer과 같이 기본 Windows 도구를 사용하는 것이 더 쉽습니다.

1

모두에게 감사의 말을 전하며 cygwin에서 라이브러리를 사용하는 것에 대한 좋은 소개입니다. Daniel이 옳았습니다.

g ++ -Wall -I/cygdrive/C/Cygwin에서 예를 -o/lib 디렉토리/boost_1_38_0/example.cpp

I : 어떤 변화가 오류, 다음 줄을 제공하는 동안 트릭을 않습니다 (대문자 I를 사용) 며칠 안에 MinGW도 확인합니다.

p.s. 간단히 그 폴더에서 부스트를 다운로드하고 압축을 풀었지만, 헤더 파일 만 사용하고 있기 때문에 Cygwin으로 컴파일 할 필요가 없을 것입니다. [cygwin에 포함 된 boost 버전은 1.33이었고 Bessel 함수가없는 것 같습니다.]

0

win7 cygwin64 g ++ 5.4 및 2017-7의 boost-1.64.7z에 있습니다. Windows의 부스트를 시작한 경우 유익한 결과가 표시되지 않습니다 (유행을 뛰어 넘는 이유는 무엇입니까?). 사용법 #include <부스트/람다/lambda.hpp> 사용법 #include :

:: g++ 5.4 in c:\cygwin64 
    :: 7z extract boost download in c:\tools\boost\boost164 
    > set BOOST_ROOT=c:\tools\boost\boost164 
    > setx BOOST_ROOT c:\tools\boost\boost164 -m 
    > cd %BOOST_ROOT% 
    > bootstrap.sh gcc (the bat files doesn't work) 
    > b2.exe 
    ...failed updating 58 targets... 
    ...skipped 18 targets... 

    ...updated 1123 targets... 

    :: Lots of example here (not ranked highly by google) 
    > mklink /D eg %BOOST_ROOT%/libs/graph/example 

    :: Compiled and run [maxflow code using boost library][1] 
    :: http://vision.csd.uwo.ca/code 
    > unzip ; vi Makefile 
    CPPFLAGS = -I %BOOST_ROOT%/ 
    LDFLAGS = -L%BOOST_ROOT%/stage/lib 
    > make 
    > set PATH=%PATH%;%BOOST_ROOT%/stage/lib 
    > maxflow.exe 
    Flow = 6