Fonte oficial do Boost:
- boost_1_89_0.7z
Ambiente: VS2022
Nota: A versão 1.83.0 não compilou corretamente, por isso optei pela versão 1.89.0
Entre no ambiente através do prompt de comando "x64 Native Tools Command Prompt for VS 2022".
:: Navegue para o diretório com os fontes descompactados
cd /d xxx\boost_1_89_0
:: Gere o executável b2
bootstrap.bat
Comandos de Compilação
:: Comando de compilação
b2 --without-test --without-python toolset=msvc address-model=64 variant=release link=shared runtime-link=shared threading=multi stage
:: Comando de instalação
b2 --without-test --without-python toolset=msvc address-model=64 variant=release link=shared runtime-link=shared threading=multi --prefix=install install
O log de compilação mostrou que a maioria dos módulos compilou com sucesso, mas ocorreu uma exceção no módulo MPI:
error: No best alternative for /F:/dev-tool/libs/boost_1_89_0/libs/mpi/build/boost_mpi with <abi>ms <address-model>64 <architecture>x86 <asynch-exceptions>off <binary-format>pe <boost.beast.allow-deprecated>on <boost.beast.separate-compilation>on <boost.cobalt.executor>any_io_executor <boost.cobalt.pmr>std <context-impl>fcontext <coverage>off <debug-store>object <debug-symbols>off <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <inlining>full <known-warnings>hide <link></link>shared <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <python-debugging>off <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <version>14.3 <toolset>msvc <variant>release <vectorize>off <visibility>hidden <warnings-as-errors>off <warnings>on <windows-api>desktop <x-deduced-platform>x86_64
matched: (empty)
matched: (empty)
</x-deduced-platform></windows-api></warnings></warnings-as-errors></visibility></vectorize></variant></toolset></version></threading></threadapi></testing.execute></target-os></strip></stdlib></runtime-link></runtime-debugging></rtti></python-debugging></profiling></preserve-test-targets></pch></os></optimization></midl-stubless-proxy></midl-robust></known-warnings></inlining></extern-c-nothrow></exception-handling></embed-manifest></embed-manifest-via></debug-symbols></debug-store></coverage></context-impl></boost.cobalt.pmr></boost.cobalt.executor></boost.beast.separate-compilation></boost.beast.allow-deprecated></binary-format></asynch-exceptions></architecture></address-model></abi>
Buscando implementações MPI compatíveis, a documentação menciona as seguintes bibliotecas:
- Open MPI
- MPICH2
- Intel MPI
Contudo, uma sugestão indicou o uso do MS-MPI, que foi testado primeiro.
Tentativa de Correção com MS-MPI
Endereço de download do SDK
Script de compilação
:: Configurar variáveis de ambiente
set MSMPI_INC=C:\Program Files (x86)\Microsoft SDKs\MPI\Include
set MSMPI_LIB=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64
:: Comando de compilação
b2 -j8 toolset=msvc address-model=64 link=shared runtime-link=shared variant=release threading=multi --with-mpi mpi-include="%MSMPI_INC%" mpi-libpath="%MSMPI_LIB%"
Exceção encontrada
error: unknown feature "<mpi-include>"
F:/dev-tool/libs/boost_1_89_0/tools/build/src/build\feature.jam:361: in expand-subfeatures-aux from module feature
F:/dev-tool/libs/boost_1_89_0/tools/build/src/build\feature.jam:422: in feature.expand-subfeatures from module feature
F:/dev-tool/libs/boost_1_89_0/tools/build/src/build\build-request.jam:20: in apply-to-property-set from module build-request
(builtin):-1: in sequence.transform from module sequence
F:/dev-tool/libs/boost_1_89_0/tools/build/src/build\build-request.jam:32: in build-request.expand-no-defaults from module build-request
F:/dev-tool/libs/boost_1_89_0/tools/build/src\build-system.jam:808: in module scope from module build-system
</mpi-include>
Tentativa de correção
Conforme mencionado em um blog, foi necessário adicionar a seguinte configuração no arquivo project-config.jam:
using mpi ;
Tentativa de compilação
b2 -j8 toolset=msvc address-model=64 link=shared runtime-link=shared variant=release threading=multi --with-mpi
Exceção encontrada
...failed compile-c-c++ bin.v2\libs\mpi\build\msvc-14.3\release\x86_64\threading-multi\content_oarchive.obj...
compile-c-c++ bin.v2\libs\mpi\build\msvc-14.3\release\x86_64\threading-multi\mpi_datatype_cache.obj
mpi_datatype_cache.cpp
.\boost/mpi/exception.hpp(86): warning C4251: "boost::mpi::exception::message":"std::basic_string<char>,std::allocator<char>>" precisa de interface DLL para uso por clientes de "boost::mpi::exception"
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.44.35207\include\xstring(541): note: veja a declaração de "std::basic_string<char>,std::allocator<char>>"
.\boost/mpi/exception.hpp(33): warning C4275: classe de interface não DLL "std::exception" usada como base de classe de interface DLL "boost::mpi::exception"
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.44.35207\include\vcruntime_exception.h(49): note: veja a declaração de "std::exception"
.\boost/mpi/exception.hpp(33): note: veja a declaração de "boost::mpi::exception"
.\boost/mpi/detail/mpi_datatype_primitive.hpp(62): warning C4267: "parâmetro": conversão de "size_t" para "int", possível perda de dados
.\boost/mpi/detail/mpi_datatype_primitive.hpp(81): warning C4267: "parâmetro": conversão de "size_t" para "int", possível perda de dados
.\boost/mpi/detail/mpi_datatype_cache.hpp(49): warning C4275: classe de interface não DLL "boost::noncopyable_::noncopyable" usada como base de classe de interface DLL "boost::mpi::detail::mpi_datatype_map"
.\boost/core/noncopyable.hpp(38): note: veja a declaração de "boost::noncopyable_::noncopyable"
.\boost/mpi/detail/mpi_datatype_cache.hpp(48): note: veja a declaração de "boost::mpi::detail::mpi_datatype_map"
.\boost/mpi/datatype.hpp(217): error C2065: "MPI_CXX_BOOL": identificador não declarado
</char></char></char></char>
O MS-MPI parece não ser compatível com a versão mais recente do Boost, pois sua última versão data de 2019. Decidiu-se por abandonar essa abordagem.
Tentativa de Correção com Intel MPI
Devido à incompatibilidade do MS-MPI, optou-se pelo Intel MPI. O arquivo project-config.jam foi modificado da seguinte forma:
Página de download do Entel MPI
- Intel-mpi-2021.18.0.742_offline
Modificação do arquivo project-config.jam
using mpi
: "C:/Program Files (x86)/Intel/oneAPI/mpi/2021.18/bin/mpicxx.exe"
:
<include>"C:/Program Files (x86)/Intel/oneAPI/mpi/2021.18/include"
<library-path>"C:/Program Files (x86)/Intel/oneAPI/mpi/2021.18/lib"
<find-static-library>impi
;
</find-static-library></library-path></include>
Comando de compilação
:: Compilar apenas o módulo mpi
b2 -j8 toolset=msvc address-model=64 link=shared runtime-link=shared variant=release threading=multi --with-mpi
:: Se não houver erros, compile todos os módulos
b2 --without-test --without-python -j4 toolset=msvc address-model=64 variant=release link=shared runtime-link=shared threading=multi stage
:: Após a compilação, instale no diretório [install]. Renomeie o arquivo INSTALL para INSTALL_ para evitar conflitos
b2 --without-test --without-python -j4 toolset=msvc address-model=64 variant=release link=shared runtime-link=shared threading=multi --prefix=install install
Bibliotecas DLL geradas pela compilação completa
cd install/lib
dir /b *.dll
boost_atomic-vc143-mt-x64-1_89.dll
boost_charconv-vc143-mt-x64-1_89.dll
boost_chrono-vc143-mt-x64-1_89.dll
boost_container-vc143-mt-x64-1_89.dll
boost_context-vc143-mt-x64-1_89.dll
boost_contract-vc143-mt-x64-1_89.dll
boost_coroutine-vc143-mt-x64-1_89.dll
boost_date_time-vc143-mt-x64-1_89.dll
boost_fiber-vc143-mt-x64-1_89.dll
boost_filesystem-vc143-mt-x64-1_89.dll
boost_graph-vc143-mt-x64-1_89.dll
boost_graph_parallel-vc143-mt-x64-1_89.dll
boost_iostreams-vc143-mt-x64-1_89.dll
boost_json-vc143-mt-x64-1_89.dll
boost_locale-vc143-mt-x64-1_89.dll
boost_log-vc143-mt-x64-1_89.dll
boost_log_setup-vc143-mt-x64-1_89.dll
boost_math_c99-vc143-mt-x64-1_89.dll
boost_math_c99f-vc143-mt-x64-1_89.dll
boost_math_c99l-vc143-mt-x64-1_89.dll
boost_math_tr1-vc143-mt-x64-1_89.dll
boost_math_tr1f-vc143-mt-x64-1_89.dll
boost_math_tr1l-vc143-mt-x64-1_89.dll
boost_mpi-vc143-mt-x64-1_89.dll
boost_nowide-vc143-mt-x64-1_89.dll
boost_process-vc143-mt-x64-1_89.dll
boost_program_options-vc143-mt-x64-1_89.dll
boost_random-vc143-mt-x64-1_89.dll
boost_regex-vc143-mt-x64-1_89.dll
boost_serialization-vc143-mt-x64-1_89.dll
boost_stacktrace_from_exception-vc143-mt-x64-1_89.dll
boost_stacktrace_noop-vc143-mt-x64-1_89.dll
boost_stacktrace_windbg-vc143-mt-x64-1_89.dll
boost_stacktrace_windbg_cached-vc143-mt-x64-1_89.dll
boost_thread-vc143-mt-x64-1_89.dll
boost_timer-vc143-mt-x64-1_89.dll
boost_type_erasure-vc143-mt-x64-1_89.dll
boost_url-vc143-mt-x64-1_89.dll
boost_wave-vc143-mt-x64-1_89.dll
boost_wserialization-vc143-mt-x64-1_89.dll
Arquivo project-config.jam completo
# Configuração do Boost.Build
# Gerado automaticamente por bootstrap.bat
import option ;
using msvc ;
using mpi
: "C:/Program Files (x86)/Intel/oneAPI/mpi/2021.18/bin/mpicxx.exe"
:
<include>"C:/Program Files (x86)/Intel/oneAPI/mpi/2021.18/include"
<library-path>"C:/Program Files (x86)/Intel/oneAPI/mpi/2021.18/lib"
<find-static-library>impi
;
option.set keep-going : false ;
</find-static-library></library-path></include>
Compilando o Boost 1.85.0 (Problema de detecção do compilador)
Ambiente de compilação: VS2022 Community Edition mais recente
Exceção Encontrada
Ao usar o VS2022 Community Edition, o bootstrap.bat gerou o b2.exe com sucesso, mas ao executar o seguinte comando, ocorreu um problema:
b2 address-model=64 variant=release link=shared runtime-link=shared threading=multi --without-python --without-test -j4 stage
Erro: compilador não encontrado
Realizando verificações de configuração
- default address-model : none [1]
- default architecture : none [1]
- x86 : no [2]
- arm : no [2]
- mips1 : no [2]
- power : no [2]
- sparc : no [2]
- cxx11_static_assert : no [2]
- x86 : no [3]
- arm : no [3]
- mips1 : no [3]
- power : no [3]
- sparc : no [3]
- cxx11_static_assert : no [3]
- cxx11_variadic_templates : no [2]
- cxx11_variadic_templates : no [3]
- cxx11_hdr_ratio : no [2]
- cxx11_hdr_ratio : no [3]
- cxx20_hdr_concepts : no [2]
- cxx20_hdr_concepts : no [3]
Solução
Conforme indicado em blogs, a versão do VS2022 é muito recente para ser reconhecida pelo b2. A solução é especificar manualmente a verssão do compilador.
- https://blog.csdn.net/ljjjjjjjjjjj/article/details/122312270
- https://www.cnblogs.com/PeterZ1997/p/18548222
Determine a versão do MSVC usando o comando PATH no prompt "x64 Native Tools Command Prompt for VS 2022". Você encontrará algo como:
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64
Modifique o arquivo project-config.jam no diretório raiz para especificar a versão e o caminho do MSVC:
# Configuração do Boost.Build
# Gerado automaticamente por bootstrap.bat
import option ;
using msvc : 14.44 : "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.44.35207\\bin\\HostX64\\x64\\cl.exe";
option.set keep-going : false ;
Usar a ferramenta especificada
:: Compilar
b2 toolset=msvc-14.44 address-model=64 variant=release link=shared runtime-link=shared threading=multi --without-python --without-test -j4 stage
:: Instalar no diretório install. Renomeie o arquivo INSTALL para outro nome para evitar conflitos
b2 toolset=msvc-14.44 address-model=64 variant=release link=shared runtime-link=shared threading=multi --without-python --without-test -j4 --prefix=install install