2011-02-23 26 views
14

Quiero usar la biblioteca ASIO de Boost en mi proyecto. Su doc ​​dice que puede ser solo de encabezado si no se usa regex y no se usa SSL. Sin embargo, ejecutar bcp para asio saca un muy muchos libraies algunas de las cuales son las fuentes de modo necesitan ser compilados, etc. bjamBoost.Asio solo como encabezado

¿Hay algún modo ASIO utilizar en el proyecto ya que sólo los encabezados, sin libs/fuente? Solo necesito ASIO, no otra parte de Boost.

EDITAR: ASIO quiere Boost.System que tiene una lib para vincular - ¿esta dependencia no puede ser para que yo pueda usar solo el encabezado ASIO?

+1

Boost.Asio requiere vincular a Boost.System. Non-boost Asio no, ver [la respuesta de Ralf] (http://stackoverflow.com/questions/5089245/boost-asio-as-header-only/5089464#5089464). –

Respuesta

12

que sabemos, se puede obtener la versión no impulso de asio de http://think-async.com/Asio/AsioAndBoostAsio

"- Boost.Asio utiliza la biblioteca Boost.System para proporcionar apoyo a los códigos de error (sistema de impulso :: :: código_error e impulsar :: system :: system_error). Asio incluye estos en su propio espacio de nombres (asio :: error_code y asio :: system_error). La versión Boost.System de estas clases admite actualmente una mejor extensibilidad para códigos de error definidos por el usuario.

- Asio es solo de encabezado de archivo y para la mayoría de los usos no requiere vincularse con ninguna biblioteca de Boost. Boost.Asio siempre requiere que establezca un vínculo con la biblioteca Boost.System y también con Boost.Thread si desea t o lanzar hilos usando boost :: thread. "

+0

Escuché acerca de ASIO sin boost pero algunos lugares escritos todavía requieren Boost para compilar – zaharpopov

+0

@zaharpopov: Según la documentación, el asio no aumenta no requiere Boost a menos que use las sobrecargas 'read_until()' o 'async_read_until()' que toman un parámetro 'boost :: regex'. – Hasturkun

2

Creo que bcp extrae la biblioteca de expresiones regulares porque se puede usar (y en máquinas con Windows se usa de manera predeterminada). Espero que pueda eliminar los archivos fuente de la biblioteca regex no hay problema. Asegúrese de agregar las opciones del compilador correctas Si se encuentra en las ventanas compilador (-DBOOST_DATE_TIME_NO_LIB y -DBOOST_REGEX_NO_LIB)

Los detalles son de this página (que por los sonidos de la misma ya ha encontrado).

No estoy seguro de qué tan inteligente es bcp, no creo que pueda pasar las definiciones indicadas anteriormente que evitan que siga la ruta mscv.

+0

Ver mi edición - ASIO también requiere Boost.System que no es solo el encabezado – zaharpopov

4

La respuesta aceptada es 100% eficaz y recomendable, pero otra opción si realmente quiere/necesidad de usar Boost Asio-es a tratar de compilar su aplicación con -DBOOST_ERROR_CODE_HEADER_ONLY. El uso de esta macro (documentado here) debe evitar la necesidad de vincular con Boost.System. Sin embargo, vale la pena leer las advertencias señaladas en this answer. En particular, es posible que tenga que crear un archivo CPP 'ficticia' que contiene:

#define BOOST_ERROR_CODE_HEADER_ONLY 
#include <boost/system/error_code.hpp> 

y desactivar la optimización de que presentar solamente. (Personalmente, no necesité hacer esto, pero YMMV ...)

+1

El macro está documentado aquí: http://www.boost.org/doc/libs/1_63_0/libs/system/doc/reference.html También definió en el argumento del compilador (con -D) funcionó. – mantal

+0

@mantal, gracias por la aclaración, edité mi respuesta para incluir un enlace a los documentos de Boost.System. – evadeflow

+1

En MSVC también necesitaba -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB -DBOOST_SYSTEM_NO_LIB. Sin embargo, no necesitaba un archivo cpp ficticio. – jtbr

Cuestiones relacionadas