i'm trying to use boost regex within my program the problem is i get this error... the only installation step i did was to add: "C:\Program Files\boost\boost_1_42" into the Additional Include Directories...
i'm using VS2008...
trying to implement this:
#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;
}
}
}
what seems to be the problem ? any additional settings should be made ?
Some Boost libraries have to be built; this is one of them. Here's how you can build them:
Make a new file called boost_build.bat
, and inside put:
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 refers to VS 2008. (10.0 for 2010, 8.0 for 2005, 7.1 for 2003, 6.0 for, well, 6.0). Once you've done this:
Extract
build_boost.bat
to<boost_root>
Go to:
<boost_root>\tools\jam
And runbuild_dist.bat
Copy
<boost_root>\tools\jam\stage\bin.ntx86\bjam.exe
to<boost_root>
Run
boost_build.bat
Libraries are located in
<boost_root>\stage\lib
Note, this is my own method. I would love if someone chimed in an easier way, or some link from Boost; it seems it's difficult to find proper build instructions from Boost.
Once it's built, make sure you let the compiler know where the libraries are in your VC Directories (the Library Paths); add "<boost_root>\stage\lib
".
In the bjam
defines, I have _SECURE_SCL=0
_HAS_ITERATOR_DEBUGGING=0
for Release. This disables all iterator checking in Release builds, for a speed improvement.
On Windows, the easiest way to get boost binary libraries is to run the installer from BoostPro consulting. Be sure to select your version of Visual Studio and check the box for the regex library during the install.
Have you installed the multithreading debug version of Boost? If not, please do so. Otherwise check your library path (in the project preferences) so that it includes the path to the file mentioned in the error message.
I'm not sure about the define settings, but I was able to get boost to build with MSVC 9.0 by running the <boostroot>\bootstrap
batch file, then editing <boostroot>\project-config.jam
file as follows. Change the line:
using mvsc
to:
using msvc : 9.0 : cl.exe
then running .\b2 install
and the boost headers and libraries were built and installed to c:\boost
.
来源:https://stackoverflow.com/questions/2274188/fatal-error-lnk1104-cannot-open-file-libboost-regex-vc90-mt-gd-1-42-lib