刚建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
答案 0 :(得分:0)
你还需要链接“pcre.lib”。如果您查看“pcrecpp.h”源代码,您会看到它包含“pcre.h”,因此它也使用了库的“c部分”。