Instale la biblioteca Boost en Windows 11

Impulsar la descarga e instalación de la biblioteca

Dirección del sitio web oficial de Boost: https://www.boost.org/  , Primero vaya al sitio web oficial para descargar la versión correspondiente del archivo de la biblioteca Boost. Haga clic en Descargar en el cuadro verde como se muestra a continuación  para ingresar a la página de descarga. 

Ingrese a la página de descarga y descargue la versión requerida. La versión que estoy descargando ahora es 1.83.0 y la versión de Windows boost_1_83_0.7z. 

 

Impulsar la instalación de la biblioteca 

Después de descomprimir el paquete de archivos descargado, se parece a la siguiente figura:

Ampliación del conocimiento: conceptos y usos de Windows PowerShell 

Windows PowerShell es un marco de gestión de configuración y automatización de tareas lanzado por Microsoft, que incluye un shell de línea de comandos y un entorno de lenguaje de secuencias de comandos. Está construido sobre .NET Framework y acepta y devuelve objetos .NET.

Los usos incluyen:

1. Gestión del sistema: los scripts de PowerShell se pueden utilizar para automatizar las tareas diarias de configuración y gestión del sistema.

2. Administración de red: por ejemplo, puede usar scripts de PowerShell para administrar la configuración de red, incluida la configuración del adaptador de red, la configuración de la dirección IP, etc.

3. Operaciones de archivos: los scripts de PowerShell se pueden utilizar para automatizar operaciones de archivos, como copiar archivos, eliminar archivos, cambiarles el nombre, etc.

4. Procesamiento de datos: PowerShell puede procesar diversos datos, como texto, XML, CSV, etc., y tiene una gran cantidad de comandos de procesamiento de datos.

5. Monitoreo del sistema: los scripts de PowerShell se pueden usar para monitorear el estado de ejecución del sistema, como el uso de la CPU, el uso de la memoria, el uso del disco duro, etc.

6. Desarrollo y pruebas de software: PowerShell es potente y adecuado para el desarrollo y pruebas de software. Por ejemplo, PowerShell se puede utilizar para automatizar la compilación, las pruebas, el empaquetado, la implementación , etc.

7. Administración del servidor: PowerShell proporciona una gran cantidad de comandos para administrar varias funciones de Windows Server, incluidos AD (Active Directory), IIS, Exchange Server, SQL Server, etc.

¿Por qué utilizar PowerShell para instalar la biblioteca Boost en Windows? 

El desarrollo de un programa Boost requiere configurar las ubicaciones de los archivos de encabezado de Boost y las bibliotecas de enlaces de Boost. La herramienta de compilación, empaquetado e implementación del programa de administración de Windows es PowerShell.

Paso 1: abra la ventana de PowerShell

Abra una ventana de cmd e ingrese el comando de powershell.

Paso 2: cambie al directorio de descompresión de Boost y ejecute el siguiente comando.

Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。

安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindows

PS C:\Users\zzg> cd D:\Boost\boost_1_83_0
PS D:\Boost\boost_1_83_0> .\bootstrap.bat
Building Boost.Build engine
LOCALAPPDATA=C:\Users\zzg\AppData\Local
Found with vswhere C:\Program Files\Microsoft Visual Studio\2022\Community
Found with vswhere C:\Program Files\Microsoft Visual Studio\2022\Community
Call_If_Exists "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\..\..\VC\Auxiliary\Build\vcvarsall.bat"  AMD64
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.5.5
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
###
### Using 'vc143' toolset.
###

Paso 3: .\bootstrap.bat· Una vez completada la operación, el resultado se muestra en la siguiente figura. Se utilizarán varios archivos más para la construcción y compilación de la biblioteca:

 Expansión: .\b2 --help Conozca qué parámetros se pueden configurar

PS D:\Boost\boost_1_83_0> .\b2 --help
B2 4.10-git

Project-specific help:

  Project has jamfile at Jamroot

Usage:

  b2 [options] [properties] [install|stage]

  Builds and installs Boost.

Targets and Related Options:

  install                 Install headers and compiled library files to the
  =======                 configured locations (below).

  --prefix=<PREFIX>       Install architecture independent files here.
                          Default: C:\Boost on Windows
                          Default: /usr/local on Unix, Linux, etc.

  --exec-prefix=<EPREFIX> Install architecture dependent files here.
                          Default: <PREFIX>

  --libdir=<LIBDIR>       Install library files here.
                          Default: <EPREFIX>/lib

  --includedir=<HDRDIR>   Install header files here.
                          Default: <PREFIX>/include

  --cmakedir=<CMAKEDIR>   Install CMake configuration files here.
                          Default: <LIBDIR>/cmake

  --no-cmake-config       Do not install CMake configuration files.

  stage                   Build and install only compiled library files to the
  =====                   stage directory.

  --stagedir=<STAGEDIR>   Install library files here
                          Default: ./stage

Other Options:

  --build-type=<type>     Build the specified pre-defined set of variations of
                          the libraries. Note, that which variants get built
                          depends on what each library supports.

                              -- minimal -- (default) Builds a minimal set of
                              variants. On Windows, these are static
                              multithreaded libraries in debug and release
                              modes, using shared runtime. On Linux, these are
                              static and shared multithreaded libraries in
                              release mode.

                              -- complete -- Build all possible variations.

  --build-dir=DIR         Build in this location instead of building within
                          the distribution tree. Recommended!

  --show-libraries        Display the list of Boost libraries that require
                          build and installation steps, and then exit.

  --layout=<layout>       Determine whether to choose library names and header
                          locations such that multiple versions of Boost or
                          multiple compilers can be used on the same system.

                              -- versioned -- Names of boost binaries include
                              the Boost version number, name and version of
                              the compiler and encoded build properties. Boost
                              headers are installed in a subdirectory of
                              <HDRDIR> whose name contains the Boost version
                              number.

                              -- tagged -- Names of boost binaries include the
                              encoded build properties such as variant and
                              threading, but do not including compiler name
                              and version, or Boost version. This option is
                              useful if you build several variants of Boost,
                              using the same compiler.

                              -- system -- Binaries names do not include the
                              Boost version number or the name and version
                              number of the compiler. Boost headers are
                              installed directly into <HDRDIR>. This option is
                              intended for system integrators building
                              distribution packages.

                          The default value is 'versioned' on Windows, and
                          'system' on Unix.

  --buildid=ID            Add the specified ID to the name of built libraries.
                          The default is to not add anything.

  --python-buildid=ID     Add the specified ID to the name of built libraries
                          that depend on Python. The default is to not add
                          anything. This ID is added in addition to --buildid.

  --help                  This message.

  --with-<library>        Build and install the specified <library>. If this
                          option is used, only libraries specified using this
                          option will be built.

  --without-<library>     Do not build, stage, or install the specified
                          <library>. By default, all libraries are built.

Properties:

  toolset=toolset         Indicate the toolset to build with.

  variant=debug|release   Select the build variant

  link=static|shared      Whether to build static or shared libraries

  threading=single|multi  Whether to build single or multithreaded binaries

  runtime-link=static|shared
                          Whether to link to static or shared C and C++
                          runtime.


General command line usage:

    b2 [options] [properties] [targets]

  Options, properties and targets can be specified in any order.

Important Options:

  * --clean Remove targets instead of building
  * -a Rebuild everything
  * -n Don't execute the commands, only print them
  * -d+2 Show commands as they are executed
  * -d0 Suppress all informational messages
  * -q Stop at first error
  * --reconfigure Rerun all configuration checks
  * --durations[=N] Report top N targets by execution time
  * --debug-configuration Diagnose configuration
  * --debug-building Report which targets are built with what properties
  * --debug-generator Diagnose generator search/execution

Further Help:

  The following options can be used to obtain additional documentation.

  * --help-options Print more obscure command line options.
  * --help-internal B2 implementation details.
  * --help-doc-options Implementation details doc formatting.

...found 1 target...

Paso 4: De acuerdo con los requisitos funcionales, ingrese las instrucciones de instalación, configure los parámetros correspondientes y espere a que se complete la instalación.

Ejemplo: no necesito python, wave y otras bibliotecas, y almaceno los archivos compilados en la carpeta VS2022.

 .\b2 stage --without-python --without-mpi --without-wave --stagedir="D:\Boost\boost_1_83_0\VS2022"

Presione Enter y espere a que se complete la instalación. 

PS D:\Boost\boost_1_83_0> .\b2 stage --without-python --without-mpi --without-wave --stagedir="D:\Boost\boost_1_83_0\VS2
022"
Performing configuration checks

    - default address-model    : 64-bit [1]
    - default architecture     : x86 [1]
    - compiler supports SSE2   : yes [2]
    - compiler supports SSE4.1 : yes [2]
    - has synchronization.lib  : yes [2]
    - has std::atomic_ref      : no [2]
    - has statx                : no [2]
    - has statx syscall        : no [2]
    - has BCrypt API           : yes [2]
    - has init_priority attribute : no [2]
    - has stat::st_blksize     : no [2]
    - has stat::st_mtim        : no [2]
    - has stat::st_mtimensec   : no [2]
    - has stat::st_mtimespec   : no [2]
    - has stat::st_birthtim    : no [2]
    - has stat::st_birthtimensec : no [2]
    - has stat::st_birthtimespec : no [2]
    - has fdopendir(O_NOFOLLOW) : no [2]
    - has dirent::d_type       : no [2]
    - has POSIX *at APIs       : no [2]
    - cxx11_auto_declarations  : yes [2]
    - cxx11_constexpr          : yes [2]
    - cxx11_defaulted_functions : yes [2]
    - cxx11_final              : yes [2]
    - cxx11_hdr_mutex          : yes [2]
    - cxx11_hdr_tuple          : yes [2]
    - cxx11_lambdas            : yes [2]
    - cxx11_noexcept           : yes [2]
    - cxx11_nullptr            : yes [2]
    - cxx11_rvalue_references  : yes [2]
    - cxx11_template_aliases   : yes [2]
    - cxx11_thread_local       : yes [2]
    - cxx11_variadic_templates : yes [2]
    - has_icu builds           : no [2]
******

Inicio rápido de Boost integrado en Visual Studio 2022

Paso 1: crea un proyecto vacío

 

Paso 2: configurar las propiedades del proyecto 

El directorio de inclusión  y el directorio de la biblioteca deben configurarse en la configuración del proyecto.   

 

En segundo lugar, el directorio de configuración y biblioteca  se muestra en la siguiente figura: 

 

 

Inicio rápido con la biblioteca Boost 

puntero inteligente

#include <boost/scoped_ptr.hpp>
#include <iostream>

using namespace boost;
using namespace std;

class MyClass {
public:
    MyClass() {
        cout << "MyClass constructor"; }
    ~MyClass() {
         cout << "MyClass destructor"; }
};

int main() {
    // 声明智能指针
    scoped_ptr<MyClass> ptr(new MyClass);

    // 现在我们可以像使用常规指针一样使用 scoped_ptr
   // ...

   // 当 ptr 超出作用域时,MyClass 对象将被删除
    return 0;
}

Recordatorio: la función básica de Scoped_ptr: liberar automáticamente los recursos que administra.

Ampliación del conocimiento: en la biblioteca Boost, los punteros inteligentes son una herramienta de gestión de recursos muy útil.

Los punteros inteligentes son "inteligentes" porque administran automáticamente los objetos asignados y liberan automáticamente el objeto cuando ya no es necesario . Esta característica de administración automática puede ayudar a evitar pérdidas de memoria y eliminar el problema de liberar memoria manualmente .

Los punteros inteligentes en la biblioteca Boost se dividen en las siguientes categorías:

1. boost::scoped_ptr: Este es un puntero inteligente simple que garantiza que el objeto se eliminará cuando finalice su alcance. No admite el intercambio de punteros ni se puede colocar en la clase contenedora de la biblioteca estándar de C++.

2. boost::shared_ptr: este es un puntero inteligente contado por referencias que admite operaciones de copia y propiedad de objetos compartidos con otros share_ptr. Cuando el último share_ptr al que se hace referencia se destruye o libera, el objeto al que se apunta se eliminará.

3. boost::weak_ptr: Este es un puntero inteligente que ayuda ashared_ptr. Observa share_ptr pero no aumenta su recuento de referencias. Se utiliza principalmente para resolver el problema de referencia circular causado por share_ptr.

4. boost::unique_ptr: este es un puntero inteligente agregado en el estándar C++ 11, que representa la semántica de propiedad exclusiva.

5. boost::intrusive_ptr: para aquellos casos en los que el recuento de referencias está incrustado en el objeto de usuario, el uso de este puntero inteligente puede reducir la sobrecarga de memoria.

objeto de función 

¿Qué es un objeto de función?

En C++, los objetos de función (también llamados functores) son objetos que se comportan como funciones. Son una forma de simular la funcionalidad de una función a través de una instancia de una clase.

Ventajas: en comparación con las funciones ordinarias, puede contener información del estado local.

Impulso a la expansión de objetos de función

Los objetos de función en la biblioteca Boost incluyen algunos objetos de función comunes (como boost::bind, usado para vincular funciones u objetos de función a sus parámetros), así como extensiones y complementos para objetos de función en STL. Por ejemplo, la biblioteca Boost.Function proporciona contenedores de funciones que pueden almacenar cualquier objetivo invocable (es decir, un objeto que se puede llamar con "()"), incluidas funciones, punteros de función y objetos de función.

#include <boost/function.hpp>
#include <iostream>

using namespace std;
void print_num(int x) {
	cout << "int is:" << x <<endl;
}

int main() {
	boost::function<void(int)> f = print_num;
	f(5);
	return 0;
}

manejo de eventos

El manejo de eventos implica crear y administrar un bucle de eventos, escuchar entradas o desencadenar eventos y tomar las acciones apropiadas cuando ocurren los eventos.

La herramienta principal de la biblioteca Boost es Boost.Asio, que puede utilizar para escribir operaciones de E/S asincrónicas (como operaciones de red o de temporizador). Boost.Asio admite conexiones simultáneas y de subprocesos múltiples, así como espera/notificación, incluidos tiempos de espera, cancelación y acciones de sigaction.

Aquí hay un ejemplo básico de Boost.Asio que muestra cómo usarlo para crear un temporizador:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

void print(const boost::system::error_code& /*e*/)
{
	std::cout << "Hello, world!" << std::endl;
}

int main()
{
	boost::asio::io_service io;
	boost::asio::deadline_timer timer(io, boost::posix_time::seconds(5));
	timer.async_wait(&print);
	io.run();

	return 0;
}

Nota: Primero cree un io_service y un temporizador. Luego configuramos el temporizador para que se active después de 5 segundos y registramos un objeto invocable (en este caso la función de impresión) para que actúe como un controlador de eventos. Luego iniciamos el bucle de eventos de io_service. Cuando expire el temporizador, se llamará a la función de impresión y generará "¡Hola, mundo!".

Puede utilizar Boost.Asio para implementar operaciones de procesamiento de eventos más complejas, incluida la programación de sockets, operaciones de puertos serie, procesamiento de señales y corrutinas, futuros, subprocesos y más.

Procesamiento de cadenas

La biblioteca Boost C++ proporciona un potente soporte para operaciones de cadenas, incluido el procesamiento de cadenas ordinarias, cadenas formateadas utilizando plantillas de parámetros variables, coincidencia y reemplazo de expresiones regulares y conversión de cadenas UNICODE.
 

#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>
#include <boost/regex.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/locale.hpp>
#include <iostream>

using namespace std;


int main() {
	string str = " hello, world! ";
	cout << "str is:" << str << endl;
	// 字符串大写转换
	boost::to_upper(str);
	cout << "str is:" << str << endl;

	// 字符串格式化
	cout << boost::format("%1% %2% %3%") % 1 % 2 % 3;

	// 字符串正则表达式
	string s = "Boost Libraries";
	boost::regex expr{ "\\w+\\s\\w+" };
	cout << std::boolalpha << boost::regex_match(s, expr) << '\n';

	// 类型转换
	int x = boost::lexical_cast<int>("123");
	string s1 = boost::lexical_cast<string>(123);

	cout << "x is:" << x << endl;
	cout << "s1 is:" << s1 << endl;

	// unicode 编码
	std::locale loc = boost::locale::generator().generate("");

	std::string original = "é";
	std::cout << "Size: " << original.size() << std::endl;

	std::string normalized = boost::locale::normalize(original, boost::locale::norm_nfc, loc);
	std::cout << "Normalized Size: " << normalized.size() << std::endl;
	return 0;
}

1. Biblioteca Boost.StringAlgo: la biblioteca Boost.StringAlgo es una biblioteca de algoritmos de cadenas que proporciona funciones de procesamiento de cadenas muy poderosas, que incluyen búsqueda, comparación, conversión, recorte de espacios, división, fusión y otras operaciones. Por ejemplo, puede usar la función de recorte para eliminar espacios al principio y al final de una cadena, y la función de división puede cortar cadenas de manera muy conveniente.

```cpp
std::string str=" ¡hola, mundo! ";
boost::trim(str);
```

2. Biblioteca Boost.Format: La biblioteca Boost.Format proporciona un carácter con parámetros similares al formato de cadena printf función. En comparación con el método de escritura de printf, el método de escritura de Boost.Format es más intuitivo y seguro para escribir.

```cpp
std::cout << boost::format("%1% %2% %3%") %1 %2 %3; `` `
3.

Biblioteca Boost.Regex: la biblioteca Boost.Regex proporciona Regular El soporte de expresiones le permite realizar operaciones complejas de coincidencia y reemplazo de cadenas. Por ejemplo, puede utilizar fácilmente expresiones regulares para determinar si una cadena es una dirección de correo electrónico, o para extraer todas las URL de un texto, etc.

```cpp
boost::regex reg("(http|https)://[^/]*"); ```
4.

Biblioteca Boost.Lexical_Cast: la biblioteca Boost.Lexical_Cast puede convertir cadenas a otros tipos, o convertir otros tipos en cadenas. Admite todos los tipos estándar de C++ y las conversiones de tipos son seguras.

```cpp
int x = boost::lexical_cast<int>("123");
std::string s = boost::lexical_cast<std::string>(123);
````

5. Biblioteca Boost.String: Boost.String biblioteca Es una biblioteca para operar en std::string y proporciona funciones que incluyen dividir, eliminar espacios, reemplazar, buscar, etc.

```cpp
std::string s = "¡Hola, mundo!";
boost::to_upper(s);
```

6. Biblioteca Boost.Unicode: la biblioteca Boost.Unicode proporciona operaciones en cadenas UNICODE, incluidos caracteres Conversión de cadenas , conversión de casos, comparación y búsqueda, etc.

```cpp
boost::locale::generator gen;
std::locale loc=gen("en_US.UTF-8");
std::locale::global(loc);
```

subprocesos múltiples

Boost es una colección de bibliotecas portátiles y de alta calidad para C++. Boost proporciona una serie de bibliotecas para programación multiproceso, incluidas boost.thread, boost.asio, etc.

1. Boost.Thread: proporciona un marco general para la programación de subprocesos múltiples, lo que permite a los desarrolladores crear y controlar subprocesos, mutex, variables de condición, etc.

2. Boost.Asio: se utiliza para programación de E/S de bajo nivel y de red, por ejemplo, los desarrolladores pueden utilizarlo para crear servidores o clientes multiproceso.

La biblioteca de subprocesos múltiples en Boost se enfoca principalmente en proporcionar funciones de procesamiento de subprocesos de bajo nivel, como creación de subprocesos, sincronización, exclusión mutua, etc. En comparación con las funciones de subprocesos múltiples admitidas por el propio lenguaje de programación, la biblioteca de subprocesos múltiples de Boost proporciona un control más detallado y puede ayudar a los desarrolladores a crear mejor aplicaciones complejas de subprocesos múltiples.

El uso de Boost para programación multiproceso puede simplificar enormemente el código y mejorar la estabilidad y portabilidad del código. Pero también requiere que los desarrolladores tengan cierta familiaridad y comprensión de los principios y el uso de subprocesos múltiples; de lo contrario, puede causar algunos problemas que son difíciles de solucionar, como interbloqueos, apropiación de recursos, etc.

#include <boost/thread.hpp>
#include <iostream>

void workerFunc()
{
    boost::this_thread::sleep(boost::posix_time::seconds(1));
    std::cout << "Worker thread is executing." << std::endl;
}

int main(int argc, char* argv[])
{
    std::cout << "Main thread is running." << std::endl;

    // 创建并运行新的工作线程
    boost::thread workerThread(workerFunc);

    // 等待工作线程完成
    workerThread.join();

    std::cout << "Main thread is done." << std::endl;

    return 0;
}

Nota: El programa tiene un hilo principal y un hilo de trabajo. Cuando se ejecuta, el hilo de trabajo imprimirá la salida después de un retraso de un segundo y luego, una vez completado, el hilo principal imprimirá la información de finalización.

Supongo que te gusta

Origin blog.csdn.net/zhouzhiwengang/article/details/132824524
Recomendado
Clasificación