2014-02-06 4 views
0

Только что построенный pcre-8.34 для MS VC++ под Windows x86, скопировал библиотеки (pcrecpp.lib) и заголовки (pcrecpp.h, pcrecpparg.h, pcre_stringpiece.h) в свои места и захотел чтобы проверить простой код (который работает под GNU Linux C++), но я получаю некоторые связывающие ошибки:MS VC++ 9 ошибка связи pcrecpp.lib

#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 и Settings \ Администратор \ Desktop \ Coding \ pcre> cl.exe/MD /EHsc/O2 pc.cpp 32-разрядный оптимизационный компилятор C/C++ Microsoft (R) Версия 15.00.21022.08 для 80x86 Авторское право (C) Корпорация Microsoft. Все права защищены.

pc.cpp Версия инкрементного компоновщика Microsoft (R) 9.00.21022.08 Авторское право (C) Корпорация Microsoft. Все права защищены.

/out:pc.exe pc.obj pcrecpp.lib (pcrecpp.obj): ошибка LNK2019: неразрешенный внешний символ _pcre_compi ле ссылки в функции «частное: структура real_pcre * __thiscall pcrecpp :: RE :: C ompile (enum pcrecpp :: RE :: Anchor) "(? Compile @ 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 :: StringP IECE Const &, ИНТ, перечисление pcrecpp :: RE :: Якорь, 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 :: Очистка (void)" (? C leanup @ RE @ pcrecpp @@ AAEXXZ) pc.exe: фатальная ошибка LNK1120: 5 неразрешенных Внешние ссылки

Любая идея, что я делаю неправильно? Пробовал и под VC++ 10, те же ошибки. Должен ли я включать <pcre.h> и #pragma comment(lib,"pcre.lib"), потому что, если я это сделаю, ссылка возникает без каких-либо ошибок, но кажется странным использовать заголовок и библиотеку C в коде на C++?

UPDATE:

Я сделал это, и теперь работает, единственная проблема заключается в: это нормально для 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 и Settings \ Администратор \ кодирования \ PCRE> cl.exe/O2/MD /EHsc pcc.cpp/ссылка/Subsystem: CONSOLE kernel32.lib User32.lib Wininet.lib pcre.lib Microsoft (R) 32-разрядный компилятор оптимизации C/C++ Версия 15.00.21022.08 для 80x86 Авторское право (C) Корпорация Microsoft. Все права защищены.

pc.cpp Версия инкрементного компоновщика Microsoft (R) 9.00.21022.08 Авторское право (C) Корпорация Microsoft. Все права защищены.

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

+0

Вы уверены, что ваш «pcre, lib» построен правильно? кажется, что он не содержит реализацию требуемых функций и т. д. –

+0

Если я ссылаюсь на 'pcrecpp.lib', это не работает, но если я свяжу его с' pcre.lib', он также работает. Я попробовал предварительно скомпилированную статическую библиотеку с одинаковыми результатами. – bsteo

ответ

0

также необходимо связать с "pcre.lib". Если вы посмотрите на исходный код «pcrecpp.h», вы увидите, что он включает «pcre.h», поэтому он также использует «c-часть» библиотеки.

+0

Да, я сделал это и работает, так что хорошо с C++ – bsteo

Смежные вопросы