Как мне скомпилировать boost, используя конкретную среду выполнения VC ++?

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

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

Предотвращение проблем с обновлением безопасности VC2005 SP1 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?

Я хотел бы собрать ускорение с 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 с правильной версией, иначе у вас обычно будет пара с более высокими числами.

0

Другие решения

Других решений пока нет …