2009-12-10 11 views
7

Digamos que desea compilar los ejemplos de "Inicio" de Boost y vincularlos usando un proyecto de Xcode en lugar de compilar en la línea de comando. Intenta la opción de solo encabezado y funciona bien.¿Cómo construyo los ejemplos de "Cómo empezar" usando XCode?

Pero entonces se toma el origen de ejemplo:

#include <boost/regex.hpp> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string line; 
    boost::regex pat("^Subject: (Re: |Aw:)*(.*)"); 

    while (std::cin) 
    { 
     std::getline(std::cin, line); 
     boost::smatch matches; 
     if (boost::regex_match(line, matches, pat)) 
      std::cout << matches[2] << std::endl; 
    } 
} 

Y hace lo siguiente:

  1. construir las bibliotecas de impulsar el uso de ./bjam instalación
  2. Abra Xcode y crear un nuevo C++ proyecto de utilidad de línea de comando.
  3. Arrastre libboost_regex.dylib en la carpeta de productos de los grupos & Archivos vista de árbol (marcando la opción que le permite copiar el archivo)
  4. Establecer las opciones del proyecto de manera que Header Rutas de búsqueda apunta a la carpeta Boost incluyen
  5. Construir ¡y ejecuta el proyecto!

Lamentablemente, si usted tiene la consola abierta (Ejecutar | Consola) que va a ver un error que no puede encontrar el dylib:

dyld: Library not loaded: libboost_regex.dylib 
    Referenced from: /Users/matt/Documents/Boost/test/GettingStarted/build/Debug/GettingStarted 
    Reason: image not found 

Así, sin saber una manera mejor para hacer que Xcode haga esto, copie el dylib en su_proyecto/compilación/depuración/¡y se ejecuta! ¡Hurra!

persona orientado a los detalles que son, escribe algunas cosas en la norma en probarlo:

> Subject: foo bar baz 
> foo bar baz 

Y entonces segfaults.

Program received signal: “EXC_BAD_ACCESS”. 

ACK!

Pero no tengas miedo. ¡Yo sé cuál es el problema! Y si nadie me gana, publicaré la solución después del almuerzo.

Respuesta

2

El problema aquí es que la compilación predeterminada de refuerzo no funciona bien con la compilación de depuración de su proyecto. Es necesario construir impulso utilizando la variante de depuración, que se realiza de esta manera:

./bjam install variant=debug define=_GLIBCXX_DEBUG --with-regex 

_GLIBCXX_DEBUG es en realidad la opción en el proyecto de Xcode que está causando el conflicto.

Luego puede vincular la versión de depuración de la biblioteca con su proyecto Xcode de depuración. (Creo que así es como se producen los binarios precompilados de MacPorts.)

Tenga en cuenta que puede usar la variante bjam para compilar varios objetivos al mismo tiempo.

También: ¡Si no funciona después de la reconstrucción, asegúrese de que la versión de la biblioteca con la que está enlazando es la que acaba de reconstruir!

También: En su lugar, podría funcionar eliminar la definición _GLIBCXX_DEBUG de la configuración de depuración. Haga doble clic en su ejecutable en Objetivos para abrir las opciones del proyecto y luego elimine _GLIBCXX_DEBUG de las macros del preprocesador.

Espero que esto ayude.

1

Tuve el mismo error. Olvidé crear una fase de compilación de "Copiar archivos" y copiar el marco.

Ir al primer botón en el navegador de proyectos para mostrar sus archivos

Haga clic en su proyecto para modificar la configuración del proyecto Haga clic en el objetivo que está utilizando el lib impulso en Haga clic en "Añadir Construir Fase" botón en la parte inferior derecha Seleccione la opción "Añadir archivos de copia" cambiar el "Destino" en la ventana emergente para "marcos" Arrastre el libboost_regex.dylib desde el navegador de proyectos a la mesa de los archivos de copia

el vínculo de la imagen no es trabajando así para las capturas de pantalla: http://imgur.com/a/8ojye#6

+0

Supongo que si la copia no está sucediendo, puede estar enlazando con una versión diferente (sin depuración) de la biblioteca, lo que explicaría por qué agregar el paso de copia lo corrige. –

Cuestiones relacionadas