2010-02-16 6 views
7

Ich versuche Boost Regex innerhalb meines Programms zu verwenden das Problem ist, ich bekomme diesen Fehler ... der einzige Installationsschritt ich tat, war hinzufügen: "C: \ Program Files \ boost \ boost_1_42" in die Zusätzliche Includeverzeichnisse ...fataler Fehler LNK1104: Datei kann nicht geöffnet werden 'libboost_regex-vc90-mt-gd-1_42.lib'

i VS2008 bin mit ...

versuchen, diese zu implementieren:

#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; 
     } 
    } 
} 

was scheint das Problem zu sein ? irgendwelche zusätzlichen Einstellungen sollten vorgenommen werden?

Antwort

14

Einige Boost-Bibliotheken müssen gebaut werden; Das ist einer von ihnen. Hier ist, wie man sie bauen können:

eine neue Datei boost_build.bat namens Make und nach innen setzen:

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 

Note 9.0 bezieht sich auf VS 2008 (10,0 für 2010 8,0 2005 7,1 2003 6,0 für, nun, 6.0).

  1. Extract build_boost.bat zu <boost_root>

  2. Wechseln Sie zu: Sobald Sie dies getan haben <boost_root>\tools\jam Und laufen build_dist.bat

  3. Kopieren <boost_root>\tools\jam\stage\bin.ntx86\bjam.exe zu <boost_root>

  4. Run boost_build.bat

  5. Bibliotheken in <boost_root>\stage\lib

Hinweis befinden, das ist meine eigene Methode. Ich würde Liebe, wenn jemand auf eine einfachere Art oder einen Link von Boost schlug; Es scheint, dass es schwierig ist, richtige Build-Anweisungen von Boost zu finden.

Sobald es gebaut ist, stellen Sie sicher, dass Sie den Compiler wissen lassen, wo sich die Bibliotheken in Ihren VC-Verzeichnissen befinden (die Bibliotheks-Pfade); füge "<boost_root>\stage\lib" hinzu.


In den bjam definiert, ich habe _SECURE_SCL=0_HAS_ITERATOR_DEBUGGING=0 für Release. Dies deaktiviert alle Iterator-Überprüfung in Release-Builds für eine Geschwindigkeitsverbesserung.

+0

noch denselben Fehler ... 1> LINK: fatal error LNK1104: Datei kann nicht geöffnet 'libboost_regex-VC90-mt-gd-1_42.lib' genau tat, wie u sagte ... – kaycee

+0

ok es funktioniert .. Zum Linker hinzugefügt "C: \ Programme \ boost \ boost_1_42 \ stage \ lib \ libboost_regex-vc90-mt-gd-1_42.lib" – kaycee

+0

'_HAS_ITERATOR_DEBUGGING' gilt nur für Debug-Builds. In Bezug auf "_SECURE_SCL", haben Sie jedoch Probleme beim Mischen von Bibliotheken, die es aktiviert haben, mit Bibliotheken, die es deaktiviert haben, festgestellt? –

1

Haben Sie die Multithreading-Debug-Version von Boost installiert? Wenn nicht, bitte tun Sie es. Andernfalls überprüfen Sie Ihren Bibliothekspfad (in den Projekteinstellungen), damit er den Pfad zu der Datei enthält, die in der Fehlermeldung erwähnt wird.

2

Unter Windows ist der einfachste Weg, Boost-Binärbibliotheken zu erhalten, die installer from BoostPro consulting auszuführen. Achten Sie darauf, Ihre Version von Visual Studio auszuwählen und das Kontrollkästchen für die Regex-Bibliothek während der Installation zu aktivieren.

+0

Die Standard-Source-Installation wäre einfach genug, wenn sie nicht willkürlich tun dumme Dinge wie Machen Sie eine Fledermaus-Datei, auf die Sie klicken, die NICHT den ganzen Job erledigt. Warum können Programmierer keine Werkzeuge entwickeln, die nur beim ersten Mal funktionieren und dem Prinzip der geringsten Verwunderung folgen? BoostPro's Installer sind in Ordnung, ich beschwere mich nur über die Zip-Datei-Downloads der Boost-Website. Es scheint mir, sie sollten sie einfach fallen lassen und eine Verbindung zu einer echten Installation herstellen. Natürlich ist BoostPro tot oder stirbt und so wird diese Antwort nicht mehr aktuell sein. –

0

Ich bin mir nicht sicher über die Einstellungen definieren, aber ich konnte Boost mit MSVC 9 zu bauen.0, indem Sie die Batchdatei <boostroot>\bootstrap ausführen und dann die Datei <boostroot>\project-config.jam wie folgt bearbeiten. Ändern Sie die Zeile:

using mvsc 

zu:

using msvc : 9.0 : cl.exe 

dann .\b2 install läuft und die Boost-Header und Bibliotheken wurden gebaut und installiert c:\boost.

Verwandte Themen