提升链接器错误 - 正则表达式 - c ++

时间:2009-11-21 06:12:50

标签: c++ boost linker

我正在尝试在boost库中编译一个简单的程序,但我不断收到链接器错误

#include <iostream>
#include <string>
#include <boost\regex.hpp>  // Boost.Regex lib

using namespace std;

int main( ) {

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

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

      try
      {
         // Set up the regular expression for case-insensitivity
         re.assign(sre, boost::regex_constants::icase);
      }
      catch (boost::regex_error& e)
      {
         cout << sre << " is not a valid regular expression: \""
              << e.what() << "\"" << endl;
         continue;
      }
      if (boost::regex_match(s, re))
      {
         cout << re << " matches " << s << endl;
      }
   }
}

但我不断收到链接器错误

  [Linker error] undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)' 

我该如何解决这个问题? Ps:我正在使用 devcpp ide ,我从 www.devpaks.org

安装了boost

1 个答案:

答案 0 :(得分:4)

如果从官方源代码发行版获得Boost库,请确保使用bjam构建二进制文件(许多boost库只是标题,并且不要求你这样做;正则表达式库需要是建)。看起来这些库是随devpack版本一起发布的,所以这对你来说应该不是问题。

确保链接器路径中有boost lib目录。使用gcc,您可以使用-L编译器标志:

gcc [whatever you normally put here] -L/path/to/boost/lib/directory

或者对于Visual C ++,您只需将lib目录添加到项目的“链接器&gt;常规”属性页的“其他库目录”中。

使用Visual C ++链接器,您无需显式告诉链接器要引入哪个特定的Boost库; Boost标头包含指令,可以自动引入正确的标头。对于g ++,您需要指定库,因此您需要查找正则表达式库的名称并添加相应的编译器指令以链接它(-llibname(这是一个小写的L))。 / p>