致命错误LNK1104:无法打开文件'libboost_regex-vc90-mt-gd-1_42.lib'

时间:2010-02-16 16:00:24

标签: c++ boost-regex

我正在尝试在我的程序中使用boost regex 问题是我得到这个错误...... 我做的唯一安装步骤是添加:“C:\ Program Files \ boost \ boost_1_42” 进入附加包含目录...

我正在使用VS2008 ......

试图实现这个:

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

似乎是什么问题?应该进行任何其他设置吗?

4 个答案:

答案 0 :(得分:14)

必须构建一些Boost库;这是其中之一。以下是构建它们的方法:

创建一个名为boost_build.bat的新文件,并在内部放置:

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指的是VS 2008.(2010年为10.0,2005年为8.0,2003年为7.1,6.0为6.0,以及6.0)。一旦你完成了这个:

  1. build_boost.bat提取到<boost_root>

  2. 转到: <boost_root>\tools\jam 并运行build_dist.bat

  3. <boost_root>\tools\jam\stage\bin.ntx86\bjam.exe复制到<boost_root>

  4. 运行boost_build.bat

  5. 图书馆位于<boost_root>\stage\lib

  6. 注意,这是我自己的方法。我会如果有人以更简单的方式说话,或者来自Boost的某些链接;似乎很难从Boost找到合适的构建指令。

    构建完成后,请确保让编译器知道VC目录中库的位置(库路径);添加“<boost_root>\stage\lib”。


    bjam定义中,我发布了_SECURE_SCL=0 _HAS_ITERATOR_DEBUGGING=0。这会禁用Release版本中的所有迭代器检查,以提高速度。

答案 1 :(得分:2)

在Windows上,获取boost二进制库的最简单方法是运行installer from BoostPro consulting。请务必选择您的Visual Studio版本,并在安装过程中选中正则表达式库的复选框。

答案 2 :(得分:1)

您是否安装了Boost的多线程调试版本?如果没有,请这样做。否则,请检查您的库路径(在项目首选项中),以便它包含错误消息中提到的文件的路径。

答案 3 :(得分:0)

我不确定定义设置,但是我可以通过运行<boostroot>\bootstrap批处理文件,然后按如下方式编辑<boostroot>\project-config.jam文件来获得使用MSVC 9.0构建的提升。改变这一行:

using mvsc

为:

using msvc : 9.0 : cl.exe

然后运行.\b2 install并构建了boost标头和库并将其安装到c:\boost