0

ディストリビューション用に一貫した 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

b2cxxflags を設定するためのオプションがあり/FIますが、ヘッダーを使用して正しいランタイムを強制するコンパイル オプションを尊重していないようです。彼らは何か他のものを使用していると思います。ブーストは msvc フラグを使用していないと思いますか?

具体的にboostをコンパイルしたいと思います8.0.50727.762

4

1 に答える 1

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正しいバージョンのものだけが表示されるはずです。それ以外の場合は、通常、より高い番号のカップルが表示されます。

于 2013-03-01T16:27:54.753 に答える