2016-05-31 1 views
1

MS Visual C++ - Express로 완전히 독립적 인 정적 실행 파일을 컴파일하려고합니다. ,Visual Studio 2010에서 부스트 라이브러리로 전체 정적 실행 파일 컴파일

General: MFC use static library

VC++ Directories -> Include Directory: PATH TO BOOST FILES

C/C++ -> Code Generation: Runtime Library Muthithreaded

C/C++ -> Precompiled Header: Don't use

Linker-> Input: Additional dependencies: FULL PATH TO ALL USED BOOST LIB FILES (C:\boost_1_61_0\stage\lib\libboost_system-vc100-mt-gd-1_61.lib....)

나는이 동적으로 링크 된 실행 파일을 컴파일 할 수 있습니다 : 나는 이러한 설정을 Visual Studio에서

b2 --toolset=msvc-10.0 --link=static runtime-link=static variant=release threading=multi

:

은 또한 정적 링크로 컴파일 된 부스트 라이브러리를 사용 해요 정적 실행 파일을 실행하면이 오류가 나타납니다.

1>LINK : fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-sgd-1_61.lib'

엠?

답변

1
같은 빌드 명령이 보일 것이다, 그래서

등록, --로 시작해서는 안 : 디버그 모드에서 프로젝트를 구축하는 것 또한

b2 toolset=msvc-10.0 link=static runtime-link=static variant=release threading=multi

, 그래서 링커는 디버그 버전을 찾고 있습니다 부스트 라이브러리의. 각 라이브러리의 두 가지 버전을 생성합니다

b2 toolset=msvc-10.0 link=static runtime-link=static variant=debug,release threading=multi

, 'libboost_foo-vc100 : 그것은 아마 당신이 모두 디버그 및 릴리스 모드에서 프로젝트를 빌드 할 수 있도록 디버그 모두를 구축하고 버전을 출시 할 좋은 생각 일 것입니다 -mt-s-1_61.lib '및'libboost_foo-vc100-mt-sgd-1_61.lib '로 변경됩니다. 's'버전은 릴리스 lib이고 'sgd'버전은 디버그 lib입니다. 각 문자의 의미는 정확히 boost docs을 참조하십시오.


EDIT : 설정을 다시보고 나면 사용중인 모든 부스트 라이브러리에 대한 경로를 수동으로 지정 한 것처럼 보입니다. 앞서 빌드 속성에 대해 언급 한 것 외에도 라이브러리 검색 경로를 VC++ Directories -> Library Directories 아래에 지정해야합니다. Visual Studio에서 boost는 #pragma comment(lib, ...) 사전 처리기 지시문을 사용하여 필요한 라이브러리를 지정합니다. 단일 라이브러리에 대해 헤더를 포함하기 전에 BOOST_<lib>_NO_LIB을 정의하거나 BOOST_ALL_NO_LIB을 정의하여 모든 라이브러리에 대해이 동작을 비활성화 할 수 있습니다.

+0

오른쪽! 나는 그것을 올바르게했다고 생각하지만 잘못 썼다. 어쨌든, 나는 그것을 다시 컴파일하여 확신 할 것입니다. WIN32 NDEBUG _CONSOLE BOOST_ALL_NO_LIB #pragma 주석 (lib, "boost_system") #pragma 주석 (lib, "boost_regex") #pragma 주석 (lib, "boost_date_time") : – Ulf

+0

내 preproccesor 정의는 지금처럼 보인다 #pragma comment (lib, "boost_serialization") #pragma comment (lib, "boost_thread") – Ulf

관련 문제