![]() ![]() |
|||
![]() |
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++. |
Í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.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 de 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, un breve complemento a ésta, pero 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, 439M
$
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
$
Compilació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 así se han tratado de repetir los mismo pasos. 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 SDK. En propósito de estos apuntes no es, pese al título, mostrar el uso de Casablanca, aquí es solamente un medio para ilustrar la instalación y uso de otras herramientas.
Recursos
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/.
|
© Todos los derechos reservados. Dr. Eduardo René Rodríguez Ávila |
Creación: 2019.04.12 Última actualización: 2019.07.16 |
|||
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 cómo ha sido obtenido, consulte la declaración al respecto. |