


![]()
Casablanca es el nombre clave del proyecto C++ REST SDK de Microsoft para comunicación cliente-servidor de cómputo en nube usando una API de diseño asíncrono en código nativo C++. Estas notas son ejemplos del uso de este proyecto en OS X y macOS.
Índice
- C++ Rest SDK 2.5.0 (pruebas de abril 2015)
- C++ Rest SDK 2.10.14 (pruebas de julio 2019)
- C++ Rest SDK 2.10.18 (pruebas agosto 2023).
C++ Rest SDK 2.5.0
Como un ejercicio para aprender cómo integrar proyectos C++ en XCode seguí las instrucciones que Denis Gladkikh1 ha puesto al respecto (y de aquí en adelante referidas como «las instrucciones«) en su blog, sobre cómo proceder con la construcción del proyecto Casablanca mediante XCode (está página no pretende ser una traducción de la página de Denis Gladkikh, quizás sólo un breve complemento a ésta; el propósito fundamental es servir de registro de una experiencia personal).
Recursos
- XCode v6.2 (6C131e)
- CMake v3.2.1
- C++ Rest SDK 2.5.0
- OpenSSL v0.9.8zc 15 Oct 2014
- Boost v1.57.0
- OS X 10.9.5
Preparativos
En las instrucciones se indica hacer uso de Homebrew, para instalar las bibliotecas necesarias. Si no se cuenta con Homebrew, éste puede ser descargado e instalado fácilmente con la información proporcionada en la página de esta utilería.
En las instrucciones se indica que se procederá también con la descarga e instalación de git, con el cual ya contaba así que fue omitido de las utilerías instaladas en el siguiente comando:
$ brew install cmake openssl boost ==>; Downloading https://homebrew.bintray.com/bottles/cmake-3.2.1.mavericks.bottl ######################################################################## 100.0% ==> Pouring cmake-3.2.1.mavericks.bottle.2.tar.gz 🍺 /usr/local/Cellar/cmake/3.2.1: 1847 files, 32M ==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2a-1.mavericks. ######################################################################## 100.0% ==> Pouring openssl-1.0.2a-1.mavericks.bottle.tar.gz ==> Caveats A CA file has been bootstrapped using certificates from the system keychain. To add additional certificates, place .pem files in /usr/local/etc/openssl/certs and run /usr/local/opt/openssl/bin/c_rehash This formula is keg-only, which means it was not symlinked into /usr/local. Mac OS X already provides this software and installing another version in parallel can cause all kinds of trouble. Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries. Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables: LDFLAGS: -L/usr/local/opt/openssl/lib CPPFLAGS: -I/usr/local/opt/openssl/include ==> Summary 🍺 /usr/local/Cellar/openssl/1.0.2a-1: 463 files, 18M ==> Downloading https://homebrew.bintray.com/bottles/boost-1.57.0.mavericks.bott ######################################################################## 100.0% ==> Pouring boost-1.57.0.mavericks.bottle.tar.gz 🍺 /usr/local/Cellar/boost/1.57.0: 10572 files, 439 $
Interesante la advertencia sobre OpenSSL (y seguramente derivada de los recientes problemas detectados con éste)
$ git clone https://git01.codeplex.com/casablanca Cloning into 'casablanca'... remote: Counting objects: 16726, done. remote: Compressing objects: 100% (7797/7797), done. remote: Total 16726 (delta 12072), reused 12363 (delta 8654) Receiving objects: 100% (16726/16726), 4.23 MiB | 208.00 KiB/s, done. Resolving deltas: 100% (12072/12072), done. Checking connectivity... done. $ cd casablanca $ mkdir build.release $ cd build.release $ cmake ../Release -DCMAKE_BUILD_TYPE=Release -G Xcode -- The C compiler identification is AppleClang 6.0.0.6000057 -- The CXX compiler identification is AppleClang 6.0.0.6000057 -- Check for working C compiler using: Xcode -- Check for working C compiler using: Xcode -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler using: Xcode -- Check for working CXX compiler using: Xcode -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Boost version: 1.57.0 -- Found the following Boost libraries: -- random -- chrono -- system -- thread -- locale -- regex -- filesystem -- Looking for include file pthread.h -- Looking for include file pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - found -- Found Threads: TRUE -- Found OpenSSL: /usr/local/Cellar/openssl/1.0.2a-1/lib/libssl.dylib;/usr/local/Cellar/openssl/1.0.2a-1/lib/libcrypto.dylib (found suitable version "1.0.2a", minimum required is "1.0.0") -- Setting clang options -- Added test library httpclient_test -- Added test library httplistener_test -- Added test library json_test -- Added test library pplx_test -- Added test library streams_test -- Added test library uri_test -- Added test library utils_test -- Added test library websocketclient_test -- Configuring done CMake Warning (dev): Policy CMP0042 is not set: MACOSX_RPATH is enabled by default. Run "cmake --help-policy CMP0042" for policy details. Use the cmake_policy command to set the policy and suppress this warning. MACOSX_RPATH is not specified for the following targets: common_utilities cpprest httpclient_test httplistener_test httptest_utilities json_test pplx_test streams_test unittestpp uri_test utils_test websocketclient_test websockettest_utilities This warning is for project developers. Use -Wno-dev to suppress it. -- Generating done -- Build files have been written to: ...casablanca/build.release $
Construcción
Abriendo el archivo de proyecto XCode generado (ubicado en el directorio señalado en la última línea en el listado previo)
$ open casablanca.xcodeproj
se lanzará el IDE XCode mostrando al proyecto y sus componentes. Estos son revisados por XCode. En mi caso hubo sólo un warning.
que indicaba:
sugerencia que parecía apropiada por lo que se decidió aceptarla.
El proceso de compilación no presentó mayor problema, salvo por una serie de advertencias en algunos módulos, derivados del orden en el que son inicializados con respecto a cómo los miembros aparecen en cada clase. Esto es un comportamiento del compilador no una característica del lenguaje de programación C++ y no necesariamente una falla de diseño. Puede ser controlado para saber si se advierte sobre posibles dependencias entre variables y si es el caso que necesite saberse. Por ejemplo:
Class C {
int a;
int b;
C():b(1),a(2){} //warning, should be C():a(2),b(1)
}
lo que también se puede controlar con la bandera -Wno-reorder.
Finalmente, el programa puede ser ejecutado dentro de XCode o desde la línea de comando localizando, dentro del directorio casablanca, a los programas ejecutables en el directorio build.release/Binaries (dependiendo del esquema de compilación usado con XCode).
C++ Rest SDK 2.10.14
Nuevamente, como un ejercicio y recordatorio en el uso de la tecnología alrededor de C++, he tratado de replicar lo que hice en 2015. Como se indica al inicio de esta página, se buscaba que ésta fuera un registro y se han de repetido los mismo pasos con el mismo resultado.
A diferencia del 2015, hoy hay mucha más información de cómo hacer uso Casablanca y es más fácil obtener y comenzar a hacer uso de este SDK2. El propósito de estos apuntes no es, pese al título, mostrar el uso de Casablanca, es solamente un medio para ilustrar la instalación y uso de otras herramientas.
C++ Rest SDK 2.10.18
Para el 2023, muchas cosas ya han cambiado. CodePlex fue movido a GitHub3, el proyecto Casablanca parece que ya no está tan activo (la ultima actualización en GitHub es de febrero del 2021, y en su README se habla de problemas de seguridad) y algunas consideraciones deben tenerse en cuenta.
Preparativos
En esta ocasión la construcción de la biblioteca se hizo en una M1. En ella hubo que instalar:
$ brew install cmake openssl boost ninja
Construcción
Para este caso, la instalación de OpenSSL se sumó a otra ya instalada con Conda. La ya existente aparecía primero en el PATH, así que fue necesario tomar nota la ubicación de las bibliotecas de Hombrew para agregarla en la invocación de cmake (ver más abajo). La ruta a usar para indicar donde encontrar las bibliotecas de OpenSSL se obtuvo con:
$ pkg-config --libs openssl -L/opt/homebrew/Cellar/openssl@3/3.1.2/lib -lssl -lcrypto
y se tomó nota del valor del parámetro -L. Así entonces, los pasos seguidos han sido:
1.- Se clonó el proyecto desde GitHub y dentro de este se editó el archivo CMakeLists.txt.
$ git clone https://github.com/Microsoft/cpprestsdk.git casablanca $ cd casablanca
2.- Se procedió con la inicialización del directorio de trabajo.
$ git submodule update --init $ mkdir build.debug $ cd build.debug
3.- La compilación el SDK en modo de depuración (donde se hace uso dela ruta de las bibliotecas de seguridad a usar).
$ LDFLAGS="-L/opt/homebrew/Cellar/openssl@3/3.1.2/lib" CPPFLAGS="-I/opt/homebrew/Cellar/openssl@3/3.1.2/lib" cmake -G Ninja ../Release -DCMAKE_BUILD_TYPE=Debug -DOPENSSL_ROOT_DIR=/opt/homebrew/Cellar/openssl@3/3.1.2/lib
4.- Para Apple Silicon (una M1, en este caso), la línea 201 del archivo casablanca/Release/libs/websocketpp/websocketpp/common/md5.hpp:
if (!((data - (md5_byte_t const *)0) & 3)) {
debe ser substituida con:
if (!((reinterpret_cast<uintptr_t>(data)) & 3)) {
5.- Construimos las pruebas y las ejecutamos
$ ninja $ cd Binaries $ ./test_runner *_test.dylib
El resultado de la batería de pruebas llevará a otras acciones, pero en este punto podemos considerar concluido el ejercicio.
Referencias
- Denis Gladkikh, «How to use Xcode with almost any C++ project,» outcoldman.com blog, posted: 2014.05.02, consulted: 2015.04.12. URL: http://outcoldman.com/en/archive/2014/05/02/xcode-and-cmake/.
- «C++ REST SDK,» CodePlex, updated: 2015.03.18, consulted: 2015.04.13. URL: https://casablanca.codeplex.com/. Wayback Machine URL: https://web.archive.org/web/20200806120342/https://archive.codeplex.com/?p=casablanca.
- «How to build for Mac OS X«, Microsoft, C++ REST SDK project repository, web. Updated: 2019.02.14; visited: 2023.08.12. URL: https://github.com/Microsoft/cpprestsdk/wiki/How-to-build-for-Mac-OS-X.
|
© Todos los derechos reservados. Dr. Eduardo René Rodríguez Avila |
Creación: 2015.04.13 Última actualización: 2023.08.12 |
|||
| El contenido de este sitio puede ser copiado y reproducido libremente mientras no sea alterado y se cite su origen. Marcas y productos registrados son citados por referencia y sin fines de lucro o dolo. Todas las opiniones son a título personal del o los autores de éstas y, salvo sea expresado de otro modo, deben considerarse como registro y expresión de la experiencia de uso de aquello que es tratado. Para conocer más sobre la posición de privacidad y responsabilidad de lo que se presenta en este sitio web y como ha sido obtenido, consulte la declaración al respecto. | |||||




