MS VC ++ 9 pcrecpp.lib链接错误

时间:2014-02-06 09:28:25

标签: c++ visual-c++ pcre

刚建pcre-8.34是用于MS VC ++视窗86下,复制的库(pcrecpp.lib)和集管(pcrecpp.h,pcrecpparg.h,pcre_stringpiece.h)至它们的位置,并希望测试简单的代码(在GNU Linux C ++下工作)但我收到一些链接错误:

#define PCRE_STATIC 1

#include <pcrecpp.h>
#include <iostream>

#pragma comment(lib,"pcrecpp.lib")

using namespace std;

int main(void)
{
  pcrecpp::RE regex("(hello)");
  std::string strBase = "hello hello hello";

  pcrecpp::StringPiece input(strBase);

  std::string match;

  int count = 0;
  while (regex.FindAndConsume(&input, &match)) {
    count++;
    std::cout << count << " " << match << std::endl;
  }
}

建筑输出:

  

C:\ Documents and Settings \ Administrator \ Desktop \ Coding \ pcre&gt; cl.exe / MD   / EHsc / O2 pc.cpp Microsoft(R)32位C / C ++优化编译器   版本15.00.21022.08适用于80x86版权所有(C)Microsoft Corporation。   保留所有权利。

     

pc.cpp Microsoft(R)Incremental Linker Version 9.00.21022.08   版权所有(C)Microsoft Corporation。保留所有权利。

     

/out:pc.exe pc.obj pcrecpp.lib(pcrecpp.obj):错误LNK2019:   函数中引用的未解析的外部符号_pcre_compi le   “private:struct real_pcre * __thiscall pcrecpp :: RE :: C ompile(enum   pcrecpp :: RE :: Anchor)“(?编译@RE @ pcrecpp @@ AAEPAUreal_pcre @@ W4Ancho   r @ 12 @@ Z)pcrecpp.lib(pcrecpp.obj):错误LNK2019:未解析的外部   符号_pcre_confi g在函数“int __cdecl中引用   pcrecpp :: NewlineMode(int)“(?NewlineMode @ p crecpp @@ YAHH @ Z)   pcrecpp.lib(pcrecpp.obj):错误LNK2019:未解析的外部符号   _pcre_exec在函数“private:int __thiscall pcrecpp :: RE :: TryMatch”中引用(类pcre cpp :: StringPiece const&amp;,int,enum   pcrecpp :: RE :: Anchor,bool,int *,int)const“(?T   ryMatch @ RE @ @@ pcrecpp @ ABEHABVStringPiece 2 @ HW4Anchor @ 12 @ _NPAHH @ Z)   pcrecpp.lib(pcrecpp.obj):错误LNK2019:未解析的外部符号   _pcre_fulli nfo在函数“public:int __thiscall pcrecpp :: RE :: NumberOfCapturin gGroups(void)const”中引用   (?NumberOfCapturingGroups @RE @ pcrecpp @@ QBEHXZ)pcrecpp.lib(pcrecpp.obj)   :错误LNK2019:未解析的外部符号_pcre_free引用   函数“private:void __thiscall pcrecpp :: RE :: Cleanup(void)”(?C   leanup @ RE @ pcrecpp @@ AAEXXZ)pc.exe:致命错误LNK1120:5未解决   的外部

知道我做错了什么吗?在VC ++ 10下也尝试过同样的错误。 我应该包含<pcre.h>#pragma comment(lib,"pcre.lib"),因为如果我这样做,链接会发生没有任何错误,但在C ++代码中使用C头和库似乎很奇怪?

更新:

我这样做了,现在有效,唯一的问题是:这对C ++来说还好吗?

#define PCRE_STATIC 1

#include <pcrecpp.h>
#include <iostream>

#pragma comment(lib,"pcrecpp.lib")
#pragma comment(lib,"pcre.lib")

using namespace std;

int main(void)
{
  pcrecpp::RE regex("(hello)");
  std::string strBase = "hello hello hello";

  pcrecpp::StringPiece input(strBase);

  std::string match;

  int count = 0;
  while (regex.FindAndConsume(&input, &match)) {
    count++;
    std::cout << count << " " << match << std::endl;
  }
}

输出:

  

C:\ Documents and Settings \ Administrator \ coding \ pcre&gt; cl.exe / O2 / MD   / EHsc pcc.cpp / link / SUBSYSTEM:CONSOLE Kernel32.Lib User32.lib   Wininet.lib pcre.lib Microsoft(R)32位C / C ++优化编译器   版本15.00.21022.08适用于80x86版权所有(C)Microsoft Corporation。   保留所有权利。

     

pc.cpp Microsoft(R)Incremental Linker Version 9.00.21022.08   版权所有(C)Microsoft Corporation。保留所有权利。

     

/out:pc.exe / SUBSYSTEM:CONSOLE Kernel32.Lib User32.lib Wininet.lib   pcre.lib get_all_proc.obj

1 个答案:

答案 0 :(得分:0)

你还需要链接“pcre.lib”。如果您查看“pcrecpp.h”源代码,您会看到它包含“pcre.h”,因此它也使用了库的“c部分”。