2010-02-16 13 views
7

que estoy tratando de impulsar el uso de expresiones regulares dentro de mi programa de el problema se me sale este error ... el único paso de la instalación lo que hice fue agregar: "C: \ archivos de programa \ impulso \ boost_1_42" en el adicionales incluyen directorios ...LNK1104 error grave: no puede abrir archivo 'libboost_regex-vc90-mt-gd-1_42.lib'

estoy usando VS2008 ...

tratar de implementar esto:

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

using namespace std; 

int main() { 

    std::string s, sre; 
    boost::regex re; 
    boost::cmatch matches; 

    while(true) 
    { 
     cout << "Expression: "; 
     cin >> sre; 
     if (sre == "quit") 
     { 
     break; 
     } 

     cout << "String:  "; 
     cin >> s; 

     try 
     { 
     // Assignment and construction initialize the FSM used 
     // for regexp parsing 
     re = sre; 
     } 
     catch (boost::regex_error& e) 
     { 
     cout << sre << " is not a valid regular expression: \"" 
       << e.what() << "\"" << endl; 
     continue; 
     } 
     // if (boost::regex_match(s.begin(), s.end(), re)) 
     if (boost::regex_match(s.c_str(), matches, re)) 
     { 
     // matches[0] contains the original string. matches[n] 
     // contains a sub_match object for each matching 
     // subexpression 
     for (int i = 1; i < matches.size(); i++) 
     { 
      // sub_match::first and sub_match::second are iterators that 
      // refer to the first and one past the last chars of the 
      // matching subexpression 
      string match(matches[i].first, matches[i].second); 
      cout << "\tmatches[" << i << "] = " << match << endl; 
     } 
     } 
     else 
     { 
     cout << "The regexp \"" << re << "\" does not match \"" << s << "\"" << endl; 
     } 
    } 
} 

lo que parece ser el problema ? cualquier configuración adicional debe hacerse?

Respuesta

14

Deben crearse algunas bibliotecas de Boost; Este es uno de ellos. He aquí cómo se puede construir con ellas:

hacer un nuevo archivo llamado boost_build.bat, y en el interior de venta:

bjam toolset=msvc-9.0 variant=release threading=multi link=static define=_SECURE_SCL=0 define=_HAS_ITERATOR_DEBUGGING=0 
bjam toolset=msvc-9.0 variant=debug threading=multi link=static 

Nota 9.0 se refiere a VS 2008. (10,0 en 2010, 8,0 en 2005, 7,1 en 2003, 6,0 para, bueno, 6.0). Una vez hecho esto:

  1. Extracto build_boost.bat a <boost_root>

  2. Ir a: <boost_root>\tools\jam corrámoslo build_dist.bat

  3. Copia <boost_root>\tools\jam\stage\bin.ntx86\bjam.exe a <boost_root>

  4. Run boost_build.bat

  5. bibliotecas se encuentran en <boost_root>\stage\lib

Nota, este es mi propio método. Me gustaría amor si alguien intervino de una manera más fácil, o algún enlace de Boost; parece que es difícil encontrar las instrucciones de compilación adecuadas de Boost.

Una vez creado, asegúrese de informar al compilador dónde se encuentran las bibliotecas en sus directorios de VC (Rutas de la Biblioteca); agregar "<boost_root>\stage\lib".


En los bjam define, tengo _SECURE_SCL=0_HAS_ITERATOR_DEBUGGING=0 para Release. Esto deshabilita todos los iteradores que controlan las compilaciones de Release, para una mejora de velocidad.

+0

todavía mismo error ... 1> LINK: LNK1104 error fatal: no se puede abrir el archivo 'libboost_regex-vc90-mt-gd-1_42.lib' hizo exactamente lo que dijo u ... – kaycee

+0

funciona bien .. Agregado al enlazador "C: \ Archivos de programa \ boost \ boost_1_42 \ stage \ lib \ libboost_regex-vc90-mt-gd-1_42.lib" – kaycee

+0

'_HAS_ITERATOR_DEBUGGING' solo se aplica a las versiones de depuración. Sin embargo, con respecto a '_SECURE_SCL', ¿ha encontrado problemas al mezclar bibliotecas que lo tienen habilitado con bibliotecas que lo tienen deshabilitado? –

1

¿Ha instalado la versión de depuración multiproceso de Boost? Si no es así, por favor, hágalo. De lo contrario, verifique la ruta de su biblioteca (en las preferencias del proyecto) para que incluya la ruta al archivo mencionado en el mensaje de error.

2

En Windows, la forma más fácil de obtener bibliotecas binarias de refuerzo es ejecutar installer from BoostPro consulting. Asegúrese de seleccionar su versión de Visual Studio y marcar la casilla de la biblioteca de expresiones regulares durante la instalación.

+0

La instalación de origen predeterminada sería bastante fácil si no hicieran cosas tontas arbitrariamente Haga un archivo de bat que haga clic en que NO hace todo el trabajo. ¿Por qué los programadores no pueden hacer herramientas que solo funcionan la primera vez y que siguen el principio de menos asombro? Los instaladores de BoostPro están bien, solo me quejo de las descargas de archivos comprimidos del sitio web de impulso. Me parece que deberían simplemente dejarlos y poner un enlace a una instalación real. Por supuesto, BoostPro está muerto o agonizando, por lo que esta respuesta ya no será actual. –

0

No estoy seguro acerca de la configuración de definición, pero pude obtener impulso para compilar con MSVC 9.0 ejecutando el archivo por lotes <boostroot>\bootstrap, luego editando el archivo <boostroot>\project-config.jam de la siguiente manera. Cambie la línea:

using mvsc 

a:

using msvc : 9.0 : cl.exe 

luego corriendo .\b2 install y las cabeceras de Boost y bibliotecas fueron construidos e instalados a c:\boost.

Cuestiones relacionadas