2013-02-27 2 views
0

Я пытаюсь получить согласованную среду исполнения VC++ для распространения, но я не могу найти ничего, что заставило boost/bjam сотрудничать.Как скомпилировать boost с использованием определенного VC++ Runtime?

Я успешно скомпилировал libcurl и UnitTest ++ с помощью метода в этой ссылке.

Avoiding problems with VC2005 SP1 Security update KB971090

Общая стратегия должна включать этот заголовок во всех CPP файлов.

#ifndef __midl 
#define _SXS_ASSEMBLY_VERSION "8.0.50727.762" 
#define _CRT_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION 
#define _MFC_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION 
#define _ATL_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION 
#ifdef __cplusplus 
extern "C" { 
#endif 
__declspec(selectany) int _forceCRTManifest; 
__declspec(selectany) int _forceMFCManifest; 
__declspec(selectany) int _forceAtlDllManifest; 
__declspec(selectany) int _forceCRTManifestRTM; 
__declspec(selectany) int _forceMFCManifestRTM; 
__declspec(selectany) int _forceAtlDllManifestRTM; 
#ifdef __cplusplus 
} 
#endif 
#endi 

b2 имеет опции для настройки CXXFLAGS, хотя они, кажется, не чтить свою опцию /FI компиляции, чтобы использовать заголовок и заставить правильное выполнение. Я предполагаю, что они используют что-то еще. Я полагаю, что boost не использует флагов msvc?

Я хотел бы скомпилировать boost с 8.0.50727.762 конкретно.

ответ

0

Видимо, bjam - это проницательность, о которых флаги имеют ведущие -- тире.

bjam^
    toolset=msvc-8.0^
    link=static^
    cxxflags=/FI"C:/boost_1_44_0/sxs_header.h"^
    --with-thread^
    --with-date_time^
    --with-system^
    -d2 

будет производить правильные флаги компилятора:

file bin.v2\libs\thread\build\msvc-8.0\release\link-static\threading-multi\win32\thread.obj.rsp 
"libs\thread\src\win32\thread.cpp" 
-Fo"bin.v2\libs\thread\build\msvc-8.0\release\link-static\threading-multi\win32\thread.obj" 
    -TP 
/O2 
/Ob2 
/W3 
/GR 
/MD 
/Zc:forScope 
/Zc:wchar_t 
/wd4675 
/EHs 
/FIC:/boost_1_44_0/sxs_header.h 
-c 

-DBOOST_ALL_NO_LIB=1 

-DBOOST_THREAD_BUILD_LIB=1 

-DNDEBUG 

"-I." 

compile-c-c++ bin.v2\libs\thread\build\msvc-8.0\release\link-static\threading-multi\win32\thread.obj 

    call "C:\Program Files (x86)\Microsoft Visual Studio 8\VC\vcvarsall.bat" x86 >nul 
cl /Zm800 -nologo @"bin.v2\libs\thread\build\msvc-8.0\release\link-static\threading-multi\win32\thread.objp" 

thread.cpp 

Что можно проверить путем создания тестового приложения, которое использует то, что требует толчок ссылки, а затем проверить его манифеста файл в каталоге промежуточных.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> 
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
    </dependency> 
</assembly> 

Вы должны видеть только один assemblyIdentity с правильной версией, в противном случае вы будете, как правило, имеют пару с более высокими номерами.